Binary Search:33. Search in Rotated Sorted Array

来源:互联网 发布:linux发行版 知乎 编辑:程序博客网 时间:2024/06/05 09:41

这道题让在旋转数组中搜索一个给定值,若存在返回坐标,若不存在返回-1。

采用二分搜素,找到nums[mid]位置,如果nums[mid]>nums[left],说明left到mid是有序的,那么看target是否在left到mid这一段,在的话right = mid - 1,不在的话left = mid + 1。如果mid到right部分是有序的,那么看target是否在mid到right这一段,在的话left = mid + 1,不在的话right = mid - 1;

class Solution {public:    int search(vector<int>& nums, int target) {        int left = 0, right = nums.size()-1;        while(left <= right)        {            int mid = left + (right - left) / 2;            if(nums[mid] == target) return mid;            if(nums[mid] > nums[left])            {                if(target >= nums[left] && target <= nums[mid])                    right = mid - 1;                else                    left = mid + 1;            }            else if(nums[mid] < nums[left])            {                if(target >= nums[mid] && target <= nums[right])                    left = mid + 1;                else                    right = mid - 1;            }            else                left++;        }        return -1;    }};