题解 | #在旋转过的有序数组中寻找目标值#
在旋转过的有序数组中寻找目标值
https://www.nowcoder.com/practice/87c0e7abcbda41e7963660fa7d020995
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @param target int整型 * @return int整型 */ int search(vector<int>& nums, int target) { int n = nums.size(); int left = 0, right = n-1; while(left <= right){ int mid = left + (right-left)/2; if(nums[mid]==target) return mid; // 旋转数组关键在于找到有序的部分,并检查target是否在这有序的部分里面,如果在可以利用二分查找,否则就在另外无序的一部分中查找 // 此时,mid左侧是有序的 if(nums[mid]>nums[n-1]){ if(target < nums[mid] && target >= nums[left]){ right = mid-1; }else{ left = mid +1; } }else{ // 此时,mid右侧是有序的 if(target > nums[mid] && target <= nums[right]){ left = mid +1; }else { right = mid -1; } } } return -1; } };