public class Solution {
/* 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。*/
public static void main(String[] args)
{
int[] array= {1,1,1,0,1,1};
System.out.println(minNumberInRotateArray(array));
System.out.println(minNumberInRotateArrayByErgodic(array));
}
/********************
* 通过二分查找方式查找
* @param array 需要进行查找的数组
* @return 查找到的最小值
*/
public static int minNumberInRotateArray(int [] array) {
int left=0;//数组左起点下标
int right=array.length-1;//数组末位置下标
int mid=(left+right)/2;//中间位置下标
//旋转后数组满足条件,最左边元素大于等于最右边的元素
//左侧下标小于右侧时,循环
while(right-left>1)
{
//如果中间下标位置所在元素大于左侧元素,说明mid在左侧非减区
//which means 最小元素位置在mid和right之间
if(array[mid]>=array[left])
{
left=mid;//变更最小值所在区间 右侧
}
else if(array[mid]<=array[right])
{
right=mid;//变更最小值所在区间 左侧
}
mid=(left+right)/2;//修改中间位置下标
}
return array[left]>array[right]?array[right]:array[left];
}
/********************
* 通过遍历方式查找
* @param array 需要进行查找的数组
* @return 查找到的最小值
*/
public static int minNumberInRotateArrayByErgodic(int [] array) {
//数组长度为零 返回0
if(array==null||array.length==0)
return 0;
//数组长度不为零
int index=0;//遍历下标
while((index<array.length-1)&&(array[index]<=array[index+1]))//开始查找
{
index++;
}
//返回查找到的元素
return array[index+1];
}
}
剑指offer:查找转置数组中的最小值
猜你喜欢
转载自blog.csdn.net/weixin_43823363/article/details/87733702
今日推荐
周排行