LeetCode之Search in Rotated Sorted Array

来源:互联网 发布:淘宝金冠猪哼少被曝光 编辑:程序博客网 时间:2024/06/03 17:37

对旋转了的数组查找关键字的下标,例如对[1,2,3,4,5,6,7]旋转后的数组为[4,5,6,7,1,2,3]进行查找,并且假设数组中没有重复的数。

【算法】利用二分查找的方法,但是二分查找是前提是对于有序表,所以在查找的过程中判断是否有序。

【代码】

int Binary_Search(int a[],int n,int key){int low,high,mid;low=0;high=n-1;while(low<=high){mid=(low+high)/2;if(a[mid]==key)return mid;else //如果中间元素的值大于左边,则左边为有序数组,在左边进行二分查找if(a[low]<a[mid]){if(a[low]<=key&&key<=a[mid])high=mid-1;elselow=mid+1;}//中间元素的值小于等于左边,则右边为有序数组,在右边进行二分查找else{if(a[mid]<=key&&key<=a[high])low=mid+1;elsehigh=mid-1;}}return -1;}

若条件改为可以有重复的数,查找某个数是否在数组中存在,存在则返回1,不在返回-1;

如输入数组为[1,3,1,1,1],输出1.

【分析】

如果A[low] <= A[mid] 条件就不能确定[low mid]区间为递增有序序列,我们就把该条件分成两个字条件:

A[low] < A[mid] 则 [low mid]区间为递增有序序列

A[low] = A[mid] 则[low mid]区间不能确定,那就low++,往下一步看看即可。

//中间元素的值小于左边,则右边为有序数组,在右边进行二分查找else if(a[low]>a[mid]){if(a[mid]<=key&&key<=a[high])low=mid+1;elsehigh=mid-1;}//中间元素的值等于左边else       low++;


0 0
原创粉丝点击