首页 > 解决方案 > 在具有重复项的排序列表中查找第一次出现的整数

问题描述

此代码正确打印数组中元素“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;
    }
}

标签: javaarraysbinary-search

解决方案


使用数组#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;
}

二分搜索将搜索范围分成两半,重复地寻找要继续的一半。它返回找到的位置或插入位置的补码 (~p)。


推荐阅读