今天看到这样一个题目:有一个数组 A,大小为 n, 相邻元素差的绝对值都是1。 如: A=
{4,5,6,5,6,7,8,9,10,9},现给定 A和目标整数 t,找出 t 在 A 中的位置。
类似题目还有:有一个 int 型数组,每两个相邻元素之间的差值不是 1 就是 -1,给定一个数,找出这个数在该数组中的位置。
【解法一】
对这个数组进行遍历,复杂度为 O(n)。如果数组长度很大的话,遍历不是一个很好的解决方法。但是有木有更好地方法呢?答案是肯定的。
【解法二】
利用当前位置的数与查找数的差来实现跨越式搜索。
数组第一个数为 A[0],要找的数是 X, 设 t = abs(X-A[0]),由于相邻两个数的绝对值为1.则第 t 个位置之前的数肯定都比 A小。重新计算 t , t = t+abs(X-A[0]),再重复上述步骤即可。
代码如下:
int FindNumberIndex(int A[],int n, int find_number)
{
int next_index = abs(find_number-A[0]);
while(next_index<n)
{
if (A[next_index] == find_number)
return next_index;
next_index += abs(find_number-A[next_index]);
}
return -1;
}