Leetcode 154 寻找旋转排序数组中的最小值
题目
代码分析
需要考虑的情况比较多,只要是start,end,mid之间两两相等或者是全部相等的情况。该逻辑的位置,应该在普通情况判断的后面,其次就是这种情况的种类,分为四种
33333123 33333453 34533333 31233333
代码实现
class Solution {
public int findMin(int[] nums) {
int start=0;
int end=nums.length-1;
while(start<end)
{
//所有的特殊情况
if(nums[start]<nums[end])
{
return nums[start];
}
if(start+1==end)
{
return Math.min(nums[start],nums[end]);
}
int mid=(start+end)/2;
//先考虑不重复的情况
if(nums[start]<nums[mid])
{
start=mid;
continue;
}
else if(nums[start]>nums[mid])
{
end=mid;
continue;
}
//然后就是特殊情况
//可能三个都相等,也可能只是两两相等
while(start<mid&&nums[start]==nums[mid])
{
start++;
}
if(start!=mid)
{
if(nums[start]>nums[mid]) return nums[mid];
else if(nums[start]<nums[mid]) return nums[start];
}
}
return nums[start];
}
}
查看13道真题和解析