您的位置:首页 > 其它

百度2014校园招聘笔试题

2017-03-01 12:07 246 查看
百度2014校园招聘笔试题

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

分析:数组第一个数为A[0], 要找的数为y,设t = abs(y - A[0])。由于每个相邻的数字之差的绝对值为1。故第t个位置之前的数肯定都比y小。因此直接定位到A[t],重新计算t,t = abs(y – A[t]),再重复上述步骤即可。这种算算法主要利用了当前位置的数与查找数的差来实现跨越式搜索。算法效率要比遍历数组的算法要高一些,并且易于实现。

java代码:

package za1;

public class EST5 {
public static void main(String[] args) {
int n=17;
int[] A={1,2,3,2,3,4,5,4,5,6,7,6,5,6,7,8,9};
System.out.println(search(A, n, 8));

}

private static int search(int[] A, int n, int t) {
int temp = Math.abs(t - A[0]);
while (temp < n) {
if (t == A[temp]) {
return temp;
}
else {
temp = temp + Math.abs(t - A[temp]);
}
}
return -1;
}
}


c++ 代码:

#include <iostream>
using namespace std;
int search(int *A, int n, int t);
int main() {
int n = 10;
int A[100] = {1,2,3,4,5,6,7,8,9,8};
cout << search(A, n, 5);
system("PAUSE");
}

int search(int *A, int n, int t) {
int temp = abs(t - A[0]);
while (temp < n) {
if (t == A[temp]) {
return temp;
}
else {
temp = temp + abs(t - A[temp]);
}
}
return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: