题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解题思想:默认的数组是满足arr[index1]<=arr[index2], index1为首, index2为尾,先用二分法进行排序,找出最小的元素,但是有可能有特殊的情况发生,列入数组 a=[2,2,2,2,1,,2]这种数组,就得通过遍历数组来进行找最小元素。
/* 用二分法查找最小元素 */ import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { int index1=0; int index2=array.length-1; int indexMid=index1; //检查数组大小是否为0; if(array.length<=0){ return 0; } while(array[index1]>=array[index2]){ //如果index2就在index1的右边,说明此时的index2就是最小的元素。 if(index2-index1==1){ indexMid=index2; break; } indexMid=(index1+index2)/2; //出现特殊情况是的处理方法:遍历数组中的元素,找到最小的元素并返回; if(array[index1]==array[indexMid]&&array[indexMid]==array[index2]&&array[index1]==array[index2]){ return findMin(array); } if(array[index1]<=array[indexMid]){ index1=indexMid; } else if(array[indexMid]<=array[index2]){ index2=indexMid; } } return array[indexMid]; } private int findMin(int[] array){ int result=array[0]; for(int i=1;i<array.length;i++){ if(array[i]<result){ result=array[i]; } } return result; } }
旋转数组的最小数字
最新推荐文章于 2024-09-04 20:55:34 发布