数组相邻元素之差绝对值都为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;}
结果:
-----------------------我和我追猪的梦-----------------------------------------------------------------
作者:mickole


浙公网安备 33010602011771号