本人电子系,只为一学生。心喜计算机,小编以怡情。
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。
你需要找到其中最小的元素。
你可以假设数组中不存在重复的元素。
样例
给出[4,5,6,7,0,1,2] 返回 0
个人感觉跟普通的二分没啥区别。。。拿纸划一划就出来了。
public int findMin(int[] nums) {
// write your code here
if(nums.length==0) return 0;
if(nums[0]<nums[nums.length-1]) return nums[0];
int left=nums[0];//第一个元素值
int right=nums[nums.length-1];//最后一个元素值
int low=0;//下标
int high=nums.length-1;
while(low<=high)
{
int mid=(low+high)/2;
if(nums[mid]>right)
{
low=mid+1;
}
if(nums[mid]<left)
{
high=mid-1;
}
}
return nums[low];
}