剑指offer——旋转数组的最小数字
时间:2019-10-29 20:57:39
收藏:0
阅读:90
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
代码实现(Java)
1 import java.util.ArrayList; 2 public class Solution { 3 public int minNumberInRotateArray(int [] array) { 4 if(array==null || array.length==0){ 5 return 0; 6 } 7 int left=0; 8 int right=array.length-1; 9 int index=left; 10 int indexMid; 11 while(array[left]>=array[right]){ 12 if(right-left==1){ 13 index=right; 14 break; 15 } 16 indexMid=(left+right)/2; 17 if(array[indexMid]==array[left] && array[indexMid]==array[right]){ 18 // 如果三个数都相等,则需要进行顺序处理,从头到尾找最小的值 19 //考虑对于{1,2,2,2,2,2} --> {2,2,2,2,2,1,2} 这种有重复值的,二分只适合 20 //在有序的基础上遍历,只能遍历整个整个这部分的数组了。 21 for(int i=1;i<array.length;i++){ 22 int min=array[0]; 23 if(min>array[i]){ 24 return array[i]; 25 } 26 } 27 }else if(array[indexMid]>=array[left]){ 28 // 如果中间位置对应的值在前一个排好序的部分,将left设置为新的处理位置 29 left=indexMid; 30 }else { 31 // 如果中间位置对应的值在后一个排好序的部分,将right设置为新的处理位置 32 right=indexMid; 33 } 34 } 35 return array[index]; 36 } 37 }
原文:https://www.cnblogs.com/wangqiong/p/11761125.html
评论(0)