二分法查找旋转数组的最小值

it2022-05-05  190

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

考 虑 1、array[mid]<array[high]: high=mid: 2、array[mid]==array[high]: low=low+1; //high=high-1; 无法判别 ,逐个搜索 3、array[mid]>array[high]: low=mid+1; 另外 mid在更新的时候,必须要考虑mid偏移量(low) +(high-low)/2

import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { int len=array.length; if(len==0){ return 0; } int low=0,high=len-1,mid; while(low<high){ mid=(high-low)/2+low; if(array[mid]>array[high]){ low = mid + 1; } else if(array[mid]<array[high]){ high=mid; } else{ low=low+1; //high=high-1; } } return array[low]; } }

最新回复(0)