找到旋转数组的最小数字
旋转数组 是 将一个 递增的数组 前面的一部分 旋转到 数组的后部分。
采用二分查找的方式可以更快找出
定义两个指针low,high ,定义 mid 为 low+high/2
根据定义 ,如果 low所在的数字比 mid 大 则 最小值 在 low 到mid之间,将 high 的值 换成mid
重新生成 mid
如果 low的数字比 mid小 ,说明 在 mid 到high 之间 ,将low的值换为mid 即可
判断退出条件,当 low后面就是high时,mid=high,mid 就是最小的位置,返回即可
/**
*
*/
/***
* @author 18071
* @Date 2019年2月21日
* 功能:在一个旋转数组中找出最小的数字
* 旋转数组 是 将一个 递增的数组 的 最小的一部 旋转到数组的后部分。
***/
public class test {
public static void main(String args[]) {
int[] x= {3,4,5,6,0,1,2};
System.out.println(x[findmin(x,0,6)]);
}
public static int findmin(int[] x,int low ,int high) {
int mid=0;
while(x[low]>x[high]) {
mid = (low+high)/2;
//跳出语句 当 low在high的前一位时,代表这此时hihgh 为最小值
if(low+1==high) {
mid=high;
break;
}
if(x[mid]<x[low])
{
high=mid;
}
else if(x[mid]>x[low])
{
low=mid;
}
}
return mid;
}
}
结果