旋转数组的最小数字
来源:互联网 发布:李炎恢js视频教程下载 编辑:程序博客网 时间:2024/06/06 03:22
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:二分查找,若中间元素比起始元素大,则说明中间元素在第一个递增序列中,最小元素在右边。若中间元素比最后元素小,则说明中间元素在第二个递增序列中,最小元素在左边。
如果起始元素和中间元素 和最后元素相同,此时无法判断,遍历查找。
import java.util.ArrayList;public class Solution { public int minNumberInRotateArray(int [] array) { int begin = 0; int end = array.length -1; int mid = 0; while(array[begin] >= array[end]){ if(end - begin == 1){ mid = end; break; } mid = (begin + end)/2; //如果begin和end的元素相同,则只能顺序查找 if(array[begin] == array[end] && array[mid] == array[begin]){ return MinInOrder(array,begin,end); } if(array[mid] >= array[begin]){ //中间数在前面的递增序列中,最小数在右边 begin = mid; }else if(array[mid] <= array[begin]){ //中间数在后面的递增序列中,最小数字在左边 end = mid; } } return array[mid]; } public int MinInOrder(int[] array,int begin,int end){ int min = Integer.MAX_VALUE; for(int i = begin; i <= end;i++){ if(min < array[i]){ min = array[i]; } } return min; }}
阅读全文
0 0
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- spring @component的作用
- bzoj 2666: [cqoi2012]组装 贪心
- Android——OnItemSelectedListener事件与二级联动
- Interceptors拦截器——OkHttp3详细使用教程
- 学习Android的一些思路和想法
- 旋转数组的最小数字
- Java SystemApi
- CtsLibcoreTestCases --libcore.icu.ICUTest#testTimeZoneDataVersion
- java io
- des 算法介绍
- 生成二维码两种方法
- edit-distance
- 笔试刷题知识点记录(1)
- 扫盲系列之http长连接短连接