旋转数组的最小数字
来源:互联网 发布:淘宝怎么开通直播间 编辑:程序博客网 时间:2024/05/17 02:06
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。注:该数组中不存在相同的元素
思路
1、思路一
顺序遍历整个数组获取最小值,这种方法时间复杂度为n, 显然不符合出题者的意图。
2、思路二
由于数组是一个有序的数组旋转而成,因此数组其实可以分为两个部分,左边比右边的数据都大,可以用left right mid三个元素保存数组中最左边、右边和中间的位置。
中间位置的元素大于右边的,则最小数在右边,中间数小于右边元素,则最小数在左边,类似于二分法查找。具体代码如下:
public static int minNumberInRotateArray(int [] array) { if(array == null || array.length == 0){ return 0; } int result = 0; int size = array.length; int left = 0; int right = size-1; int mid = 0; while (array[left] >= array[right]){ if(right - left<=1){ break; } mid = left+(right-left)/2; if(array[mid]>array[right]){ // 最小数在右边 left = mid; }else{ // 最小数在左边 right = mid; } if(left == right || left== right-1){ break; } } result = array[left]>array[right]?array[right]:array[left]; return result;}
阅读全文
0 0
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 旋转数组的最小数字
- 9.数据结构(2)
- HDU2022比较绝对值大小
- JNI(或者也可以说是NDK) JAVA 调 .C文件
- linux之磁盘共享(cifs)
- Ubuntu16.04以太网连接教程
- 旋转数组的最小数字
- Spring中AutowireCapableBeanFactory的使用
- 数据分析(3)-数据清洗
- 结构体
- VC与DEV编译器关于ifstream的文本反复读取问题存在的不同
- Oracle
- HashSet、TreeSet、LinkedHashSet的区别
- 相关滤波器算法 速度做到极致
- C++中lambda表达式(匿名函数)的用法