1. 程式人生 > >LeetCode-81. Search in Rotated Sorted Array II

LeetCode-81. Search in Rotated Sorted Array II

解決 sea ++ ddl 調整 .html 重復 lee clas

一、問題描述

  這是問題33的升級版,在數組中有重復元素。

二、問題解決

  思路和問題33一樣,不同點在於判斷nums[left]==nums[middle]的時候不能得出左右哪個是單調遞增,哪個是循環遞增。這時候簡單遞增一下left,應為此時left一定不為target,可以使代碼進一步往下運行。

 1 bool search_duplicates(vector<int>& nums, int target) {
 2     int left = 0;
 3     int right = nums.size() - 1;
 4     while (left <= right) {
5 int middle = (left + right) / 2; 6 if (nums[middle] == target) 7 return true; 8 if (nums[middle] > nums[left]) 9 if (target <= nums[middle] && nums[left] <= target) 10 right = middle - 1; 11 else 12 left = middle + 1
; 13 else if (nums[middle] < nums[left]) 14 if (target >= nums[middle] && nums[right] >= target) 15 left = middle + 1; 16 else 17 right = middle - 1; 18 else 19 left++; 20 } 21 return false; 22
} 23 24 int main() 25 { 26 vector<int> v = { 4, 5, 6, 7,7, 0, 1, 2 }; 27 cout << search(v, 7) << endl; 28 29 system("pause"); 30 return 0; 31 }

  和33相比,只有18行和19行多了一個等於時的條件判斷,然後前面把等於的條件去掉了,調整了if esle。

LeetCode-81. Search in Rotated Sorted Array II