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