在部分有序数组中查找定值

来源:互联网 发布:淘宝虚拟商品退款规则 编辑:程序博客网 时间:2024/05/18 01:24

描述:给定一个有序数组经过部分旋转,如{0,1,2,3,4,5,6}旋转后{4,5,6,0,1,2,3};给定key值,若查找成功则返回数组中key值元素索引,否则返回-1。

思路一:暴力法,从数组头遍历到尾部,依次查找。

class Solution{public:int search(int A[],int n,int value){if(n==0)return -1;for(int i=0;i<n;i++){if(A[i]==value)return i; } return -1;}}; 
思路二:利用二分查找。

class Solution{public:int search(int A[],int n,int value){if(n==0)return -1;int first=0;int last=n-1;while(first!=last){const int mid=first+(last-first)/2;if(A[mid]==value) return mid;if(A[first]<A[mid])//分两种情况:1.前半部分有序2.后半部分有序{if(A[first]<=value&&A[mid]>value){last=mid-1;}else{first=mid+1;}}else{if(A[mid]<value&&A[last]>=value){first=mid+1;}else{last=mid-1;}}}return -1;}}; 


0 0
原创粉丝点击