题解 | #在旋转过的有序数组中寻找目标值#
在旋转过的有序数组中寻找目标值
http://www.nowcoder.com/practice/87c0e7abcbda41e7963660fa7d020995
二分法判断哪边有序,哪边有序就固定哪一边并且移动另一边的指针,每次移动一格。对于无序的一边,每次移动一格进行检查。
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { // write code here int left = 0; int right = nums.size() - 1; while(left < right) { int mid = (left+right)/2; //如果已经找到了这个数; if(nums[mid] == target) { return mid; }else { //没有找到这个数则判断左/右哪个是有序的; if(nums[left] <= nums[mid]) { //左边有序; if(nums[left] < target && target <= nums[mid]) { //单调区间内查找; right = mid - 1; }else { //无序区间查找; left = mid + 1; } }else { //否则右边有序; //单调区间内查找; if(nums[mid] < target && target<=nums[right]) { left = mid + 1; }else { //无序区间内查找; right = mid - 1; } } } } if(nums[left] == target) return left; return -1; } };