leetcode 81. 搜尋旋轉排序陣列 II
阿新 • • 發佈:2019-01-25
假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,0,1,2,2,5,6]
可能變為 [2,5,6,0,0,1,2]
)。
編寫一個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true
,否則返回 false
。
示例 1:
輸入: nums = [2,5,6,0,0,1,2], target = 0 輸出: true
示例 2:
輸入: nums = [2,5,6,0,0,1,2], target = 3 輸出: false
思路
和I一樣其實,變數在於會有複數個相同元素,會多一種情況,就是mid==end,此時只要去掉end這個重複元素,即可
code
class Solution { public: bool search(vector<int>& nums, int target) { return search(nums,0,nums.size()-1,target); } bool search(vector<int>& nums,int start,int end,int target){ if(start>end) return false; int mid=(start+end)/2; if(nums[mid]==target) return true; if(nums[mid]>nums[end]){ if(nums[mid]>target && nums[start]<=target) end=mid-1; else start = mid+1; //後半 } else if(nums[mid]==nums[end]){ end--; } else{ if(nums[mid]<target && nums[end]>=target) start = mid+1; else end=mid-1; } return search(nums,start,end,target); } };