已知一個長度為 n 的數組,預先按照升序排列,經由 1 到 n 次 旋轉 后,得到輸入數組。例如,原數組 nums = [0,1,4,4,5,6,7] 在變化后可能得到:
若旋轉 4 次,則可以得到 [4,5,6,7,0,1,4]
若旋轉 7 次,則可以得到 [0,1,4,4,5,6,7]
注意,數組 [a[0], a[1], a[2], …, a[n-1]] 旋轉一次 的結果為數組 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。
給你一個可能存在 重復 元素值的數組 nums ,它原來是一個升序排列的數組,并按上述情形進行了多次旋轉。請你找出并返回數組中的 最小元素 。
示例 1:
輸入:nums = [1,3,5]
輸出:1
代碼
class Solution {public int findMin(int[] nums) {int l=0,r=nums.length-1;while (l<=r){int mid=(r-l)/2+l;if(nums[r]==nums[mid]) {//縮小范圍r--;}else if(nums[r]<nums[mid])
//mid在左邊旋轉過去的區間,r在右邊區間,最小值出現在旋轉過去區間的后一位,所以左邊界右移{l=mid+1;}else {//mid和r是在同一個遞增區間,最小值只可能出現在[l,mid]區間中,所以右邊界左移r=mid;}}return nums[l];}
}