在具有重复项的排序列表中查找整数的第一次出现
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,那 nothing 与 binary 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;
}
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)。
这段代码正确地打印了元素 '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,那 nothing 与 binary 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;
}
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)。