Search in Rotated Sorted Array解题报告

来源:互联网 发布:money for mac 破解版 编辑:程序博客网 时间:2024/06/02 16:47

两种方法

1、首先找到两个数组的分界,然后在两个数组上分别应用二分查找

int bsearch(int A[], int start, int end, int target){while(start <= end){int mid = (start + end) >> 1;if(target == A[mid])return mid;else if(target > A[mid]){ start = mid + 1; }else{ end = mid - 1; }}return -1;}//Runtime: 7msint search(int A[], int n, int target) {        int preMax = 0;int aftMin = 0;for(int i = 1; i < n; ++i){if(A[i] < A[i - 1]){preMax = i - 1;aftMin = i;break;}}int idx = -1;if(target >= A[0] && target <= A[preMax]){idx = bsearch(A, 0, preMax, target);}else{idx = bsearch(A, aftMin, n - 1, target);}return idx;    }

2、直接在原数组上应用二分查找

int search(int A[], int n, int target){int start = 0;int end = n - 1;while(start <= end){int mid = (start + end) >> 1;if(target == A[mid])return mid;else{if(A[start] <= A[mid]){if(target > A[mid])start = mid + 1;else if(target >= A[start])end = mid - 1;else start = mid + 1;}else{if(target < A[mid])end = mid - 1;else if(target <= A[end]) start = mid + 1;else end = mid - 1;}}}return -1;}


0 0