LeetCode 81. Search in Rotated Sorted Array II

問題連接

LeetCode 81. Search in Rotated Sorted Array IIhtml

題目解析

給定一個「升序」的數組,從中尋找目標值。「升序」:旋轉後的升序,例如 [4,5,1,2,3]。數組

時間限制:\(O(lgN)\)spa

解題思路

本題與上一題LeetCode 33. Search in Rotated Sorted Array幾乎如出一轍,惟一的改變是能夠有 重複 的數據。重複的數據有什麼影響呢?code

上一題中,咱們找到的規律是:若是中間值小於最右值,則右半段絕對升序,若中間值大於最右值,則左半段絕對升序。若是出現了重複數字,影響只有一個——中間值等於最右值。這種狀況怎麼辦呢?直接把最右值去掉便可(即right--)。htm

除此以外,其餘代碼與上一題相同。blog

參考代碼

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

類似題目

LeetCode 33. Search in Rotated Sorted Arrayip


LeetCode All in One題解彙總(持續更新中...)leetcode

本文版權歸做者AlvinZH和博客園全部,歡迎轉載和商用,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利.get

相關文章
相關標籤/搜索