有一个int型数组,每两个相邻的数之间的差值不是1就是-1.现在给定一个数,要求查找这个数在数组中的位置。
其实思想就是跳跃查找,因为你知道了一个数,那么它第二个数最多相差1,第三个数最多相差2,而可以用目标数减去这个数来排除一些多余的查找,比如你要的数是10,第一个数是2,那么它前7个数无论如何都达不到10,只有在第8个数才有可能,所以可以直接判断第8个数。
下面是别人的代码借用一下思想大概就是这样:
void PrintfArray(int a[], int n) { for (int i = 0; i < n; i++) printf("%d ", a[i]); putchar(‘\n‘); } int FindNumberInArray(int arr[], int n , int find_number) { int next_arrive_index = abs(find_number - arr[0]); while (next_arrive_index < n) { if (arr[next_arrive_index] == find_number) return next_arrive_index; next_arrive_index += abs(find_number - arr[next_arrive_index]); } return -1; }
时间: 2024-12-31 04:39:11