java - 在具有重复项的排序列表中查找第一次出现的整数
问题描述
此代码正确打印数组中元素“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;
}
}
解决方案
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)。
推荐阅读
- javascript - React-Redux:我是否必须在单个组件树中的所有组件上使用 connect() 和映射状态/调度?有没有办法只做一次?
- angular - Web服务器路由不适用于Angular7
- python - 为什么 StringField 总是无?
- angular - ngx-bootstrap 是否支持 Angular 4?如果支持,为什么我会收到以下错误?
- javascript - 如何使用 jQuery 将 JSON 文件中的数据显示到 Bootstrap 4 Carousel,包括图像哈希
- reactjs - reactjs如何创建全局变量
- r - 如何将具有特定数据的新列添加到 R 数据框中
- html - 我的子子菜单的位置和打开是错误的
- blueprism - 在列表中选择 SAP 灰色框元素
- angular - 在按钮单击时将日期从 Html 传递到 Angular 中的 Ts