代码在我的 ide 中运行良好,但在 GeeksforGeeks 上提交后没有得到输出

Code is working good in my ide but not getting output after submitting on GeeksforGeeks

第一次和最后一次出现 X。

一个可能有重复元素的排序数组,任务是找到给定数组中元素 x 第一次和最后一次出现的索引。

注意:如果在数组中找不到数字 x 则打印'-1'。

输入: 第一行包含一个整数 T,即测试用例的数量。每个测试用例的第一行包含两个整数 n 和 x。第二行包含 n spaced 个整数。

输出: 打印数字 x 第一次和最后一次出现的索引,中间有 space。


import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
 {
     public static void main(String [] args){
        Scanner scn = new Scanner(System.in);
        int n = scn.nextInt();
        int x = scn.nextInt();
        int [] arr = new int[n];
        for(int i = 0; i < n; i++){
            arr[i]= scn.nextInt();
        }
        
        int low = 0;
        int high = arr.length -1;
        int fi;

        while(low <= high){
            int mid = (low + high)/ 2;
            fi = -1;
            if(x > arr[mid]){
                low = mid + 1;
            }else if(x < arr[mid]){
                high = mid - 1;
            }else{
                fi = mid;
                high = mid - 1;
            }

        }
        low = 0;
        high = arr.length -1;
        int li;

        while(low <= high){

            int mid = (low + high)/ 2;
            li = -1;
            if(x > arr[mid]){
                low = mid + 1;
            }else if(x < arr[mid]){
                high = mid - 1;
            }else{
                li = mid;
                low = mid + 1;
            }

        }

        System.out.println(fi);
        System.out.println(li);

    }
    
}

运行 代码后的输出 -1; -1;

您的代码中存在一些逻辑错误。

您正在 while 循环中重新初始化变量 fili 的值。

它们应该只初始化一次,而且是在循环之外。

我已更正您的代码并将其提交到 Geeks For Geeks 练习题,First and last occurrences of X

查看以下在 GFG 上具有 Accepted 状态的实现:

import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
 {
     public static void main(String [] args){
        Scanner scn = new Scanner(System.in);
        
        int testcase = scn.nextInt();
        
        while(testcase-- > 0){

            int n = scn.nextInt();
            int x = scn.nextInt();
            int [] arr = new int[n];
            for(int i = 0; i < n; i++){
                arr[i]= scn.nextInt();
            }
            
            int low = 0;
            int high = arr.length -1;
            int fi = -1;
    
            while(low <= high){
                int mid = (low + high)/ 2;
                
                if(x > arr[mid]){
                    low = mid + 1;
                }else if(x < arr[mid]){
                    high = mid - 1;
                }else{
                    fi = mid;
                    high = mid - 1;
                }
    
            }
            low = 0;
            high = arr.length -1;
            int li = -1;
    
            while(low <= high){
    
                int mid = (low + high)/ 2;
               
                if(x > arr[mid]){
                    low = mid + 1;
                }else if(x < arr[mid]){
                    high = mid - 1;
                }else{
                    li = mid;
                    low = mid + 1;
                }
    
            }
    
            if(fi==-1 || li==-1){
                System.out.println(fi);
            }else{
                System.out.println(fi + " " + li);
            }
            
            
        }
    }
    
}

PS: 接受关于 GFG 实践的判决: