题解 | #在旋转过的有序数组中寻找目标值#
在旋转过的有序数组中寻找目标值
http://www.nowcoder.com/practice/87c0e7abcbda41e7963660fa7d020995
思路
1、二分法
2、得到mid后先判断单调区间。分两种讨论,得到单调区间以后再判断target和当前单调区间的关系,对应地更新端点
3、注意边界条件(输入为1的时候等)
代码
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; } // 前半段单调增加 if(nums[mid]>=nums[left]){ // 若target在该区间内 if(target>=nums[left] && target<=nums[mid]){ right = mid; } // target不在该区间内 else{ left = mid+1; } } // 后半段单调增加 else{ // 如果target在后半段内 if(target>=nums[mid] && target<=nums[right]){ left = mid; } // target不在右边这个单调区间内 else{ right = mid-1; } } } return -1; } };