LeetCode-81. Search in Rotated Sorted Array II
阿新 • • 發佈:2018-01-24
解決 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