[二分搜索] leetcode 33 Search in Rotated Sorted Array

problem: https://leetcode.com/problems/search-in-rotated-sorted-array/

        二分搜索题。检查二分后的半段是否满足递增条件,如果满足且数据落在这一区间,就在这一区间查找,否则到另一区间查找。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        if(!nums.size()) return -1;
        int low = 0;
        int high = nums.size() - 1;
        while (low < high) 
        {
            int mid = (low + high) / 2;
            if (nums[mid] == target) return mid;
        
            if (nums[low] <= nums[mid]) 
            {
                if (target >= nums[low] && target < nums[mid])  // it's ascending
                {
                    high = mid - 1;
                } 
                else {
                    low = mid + 1;
                }
            } 
            else 
            {
                if (target > nums[mid] && target <= nums[high])   // it's ascending
                {
                    low = mid + 1;
                } 
                else 
                {
                    high = mid - 1;
                }
            }
        }
        return nums[low] == target ? low : -1;
    }
};

猜你喜欢

转载自www.cnblogs.com/fish1996/p/11333732.html