在具有重复项的排序列表中查找整数的第一次出现

Find first occurrence of an integer in a sorted list with duplicates

这段代码正确地打印了元素 'k' 在数组中的第一次出现,但是我正在做的问题是如果元素 'k' 完全不存在于数组中则打印 -1 .我知道这很容易,但我只是被卡住了,它令人沮丧任何帮助?

n = sc.nextInt();
k = sc.nextInt();
int arr[] = new int[n];
for(int i=0;i<n;i++) {
    arr[i] = sc.nextInt();
}
for(int i=0;i<n;i++) {
    if(arr[i]==k) {
        System.out.println(i);
        break;
    }
}

你在标题里问的,和你在postbody里问的,是两个不同的问题;但是,如果我们按照您的问题 body,那 nothingbinary search 没有关系,并且引入布尔标志会让您你要的是什么:

boolean notFound = true;

for(int i=0; i<n; i++) {
    if(arr[i] == k) {
        System.out.println(i);
        notFound = false;
        break;
    }
}

if(notFound) System.out.println("-1");
int findOccurenceOfElemet(int[] a, int k) {
        if(a.length == 0) {
            return -1;
        }

        for(int i = 0; i < a.length; i++) {
            if(a[i] == k) {
                return i;
            }
        }
        
        //return -1 if element not found
        return -1;
    }

使用Arrays#binarySearch:

int firstIndexOf(int[] sortedArray, int x) {
    int p = Arrays.binarySearch(sortedArray, x);
    if (p < 0) {
        return -1;
    }
    while (p > 0 && sortedArray[p - 1] == x) {
        --p;
    }
    return p;
}

二分查找将搜索范围一分为二,重复寻找哪一半继续。它 returns 找到的位置或插入位置的补码 (~p)。