Suppose an array sorted in ascending order are rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
The array may contain duplicates.
Idea: There are repeating elements, you can not press I so that the three categories (inverse:Input: [3,3,1,3]=> roate in the right to judge no rotate). The solution is, when encountering Nums[start]=nums[end], end-1, looking for different elements and then the dichotomy.
classSolution { Public: intFindmin (vector<int>&nums) { returnDFS (Nums,0, Nums.size ()-1); } intDFS (vector<int>& Nums,intStartintend) { if(Start==end)returnNums[start]; if(Nums[start]==nums[end])returnDFS (Nums,start, end-1); intMID = start + ((End-start) >>1); if(Nums[mid] > Nums[end]) {//rotate in the right returnDFS (Nums, mid+1, end); } Else if(Nums[start] <= Nums[mid]) {//No rotate returnNums[start]; } Else{//Rorate in the left returnDfs (Nums, start, mid); } }};
154. Find Minimum in rotated Sorted array II (array; Divide-and-conquer)