数组相邻元素之差绝对值都为1,找给定元素t在数组中位置

此题出自百度2014北京校园招聘笔试题:

题目:

有这样一个数组A,大小为n,相邻元素差的绝对值都是1,如A={4,5,6,5,6,7,8,9,10,9},现在给定数组A和目标整数t,请找到t在A中的位置。

解法:

     最简单的方式是循环遍历每一个元素之后比较,找到t在A中的位置,此种方法效率最低;

改进:因为相邻元素差的绝对值都是1,那么任意两个元素相距的位置至少是两元素差的绝对值个,假设要找的元素是t,t和a[0]的差为y1=abs(t-a[0]),那么t和a[0]的距离至少是y1,判断y1位置元素是否与所在元素相等,是则成功返回,否则再求一次差值y2=abs(t-a[y1]),t和a[y1+y2]的距离至少是y2,继续向后查找,知道相等为止,此种方法效率较前一种要高。

代码:

#include <iostream>
#include <cstdlib>
using namespace std;
int findIndex(int *p, int n, int val);
int main(void)
{
	int arr[]={4,5,6,5,6,7,8,9,10,9};
	int n = sizeof(arr)/sizeof(arr[0]);
	for(int i = 0; i < n; i++ )
	{
		int index = findIndex(arr, n, arr[i]);
		cout <<"数组元素:"<<arr[i]<<"所在下标为:"<<index<<endl;	
	}
		
}
int findIndex(int p[], int n, int val)
{
	
	int i = abs(val - p[0]);
	while( i < n)
	{
		if(p[i] == val)
			return i;
		i += abs(val - p[i]);
	}
	return -1;
}

结果:

QQ截图20140228154722

posted @ 2014-02-28 15:49  mickole  阅读(696)  评论(0)    收藏  举报