Title Description:
is 0 1 2 4 5 6 7 4 5 6 7 0 1 2 in the array.
This question "Jian refers to offer" on the original question, directly on the code
Solution:
intFindmin (vector<int>&nums) { intStart =0; intEnd = Nums.size ()-1; while(Start <end) { if(Nums[start] <Nums[end]) Break; intMID = start + (End-start)/2; if(Nums[mid] >=Nums[start]) Start= Mid +1; ElseEnd=mid; } returnNums[start];}
Reference:https://leetcode.com/discuss/13389/compact-and-clean-c-solution
The above procedure does not take into account the existence of the same element in the array. If considered, the code needs to be modified.
Solution:
intFindmin (vector<int>&nums) { intStart =0; intEnd = Nums.size ()-1; while(Start <end) { if(Nums[start] <Nums[end]) Break; intMID = start + (End-start)/2; if(Nums[mid] >Nums[end]) Start= Mid +1; Else if(Nums[mid] <Nums[end]) End=mid; Else { ++start; --end; } } returnNums[start];}
Finally, attach a solution to the offer of swords:
intMininorder (vector<int> &nums,intStartintend) { intMin =Nums[start]; for(inti =1; I < nums.size (); ++i) {if(Nums[i] <min) min=Nums[i]; } returnmin;}intFindmin (vector<int>&nums) { intStart =0; intEnd = Nums.size ()-1; while(Start <end) { if(Nums[start] <Nums[end]) Break; intMID = start + (End-start)/2; if(Nums[mid] = = Nums[start] && Nums[mid] = =Nums[end]) { returnMininorder (nums, start, end); } if(Nums[mid] >=Nums[start]) Start= Mid +1; ElseEnd=mid; } returnNums[start];}
Ps:
The solution is not necessarily the best in the "Sword Point offer"!!!
Find Minimum in rotated Sorted array (smallest number of rotated arrays)