基本和【153】一样,直接遍历即可。若用二分查找,由于可以存在重复值,求边界时可能出现左边界值和右边界值一样的情况,为了排除这种情况,先预处理左右边界使二者不等。
public class Solution {
public int FindMin(int[] nums) {
int l = 0,r = nums.Length-1;
while(l < r && nums[l] == nums[r] )
r--;
while(l < r)
{
int mid = (l+r)/2;
if(mid > 0 && nums[mid] < nums[mid-1])
return nums[mid];
if(nums[mid] > nums[r])
l = mid + 1;
else
r = mid - 1;
}
return nums[l];
}
}