您的位置:首页 > 编程语言

一个有n个整数的递增有序数组。对它进行向左或向右循环移动若干次后,要求给出一个代码实现,尽可能快地从这个数组中寻找指定值所在的位置

2015-03-27 15:21 393 查看
题目:一个有n个整数的递增有序数组。对它进行向左或向右循环移动若干次后,要求给出一个代码实现,尽可能快地从这个数组中寻找指定值所在的位置,不在数组中返回-1.

例如:输入:5 (然后在数组(15 16 19 20 25 1 3 4 5 7 10 14)中寻找5 的位置)

输出: 8 (为5 在数组的下标)

对于给定的这道题很多人考虑效率都会用折半查找,这里说一下我的思路:

1.设定待查数字m

2.将待查数字m和数组首位数字arr[0]进行比较

2.1.如果m>arr[0],则m在从左至右升序序列中

2.2.如果m<arr[0].则m在从右至左降序序列中

public int Serch(int arr, int m){

int index = 0;//用于记录返回目标数的位置

if(m>=arr[0]){

for(int i=0;i<n;i++){

if(m==arr[i])

index = i;

}

}else{

for(int j=n-1;j>0;j--){

if(m==arr[j])

index = j;

}

return index;

}
上述实现如果出现arr[0]>arr[n-1],则表明整个序列有序,可以直接二分查找,当然我也有想过完全用二分查找,但是必须找到无序处的两个分界值,这样就会增加额外时间复杂度,希望有更好的解法交流交流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐