旋转数组中的最小数字
来源:互联网 发布:ipad mini2软件下载 编辑:程序博客网 时间:2024/05/05 13:33
旋转数组中的最小数字
问题描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
方法1:
从头到尾遍历一遍数组,就可以找出最小的数据元素。这种思路的时间复杂度显然是O(n).
缺点:没有利用到旋转数组的特性。
方法2:
旋转之后数组可以划分为两个有序子数组,而且排在前面的子数组大于或者等于后面的子数组。最小的元素刚好是这两个子数组的分界线。
代码如下:
/**
* Created by admin on 2017/2/25.
*/
public class rotateMinNumber {
public static void main(String[] args) {
int arr[] = {3, 4, 5, 1, 2};//旋转数组
旋转数组的最小数字 test = new 旋转数组的最小数字();
System.out.println(test.minNumberInRotateArray(arr));
}
public int minNumberInRotateArray(int[] array) { int begin = 0; int end = array.length - 1; int middle = begin; if (array.length == 0) { return 0; } while (array[begin] >= array[end]) { if (end - begin == 1) { middle = end; break; } middle = (begin + end) / 2; if (array[middle] >= array[begin]) { begin = middle; } else if (array[middle] <= array[end]) { end = middle; } } return array[middle];}
}
0 0
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- ~旋转数组中的最小数字~
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- 旋转数组中的最小数字
- 剑指Offer旋转数组中的最小数字
- 05 旋转数组中的最小数字
- 【数据结构】旋转数组中的最小数字
- 【剑指offer】旋转数组中的最小数字
- 剑指Offer:旋转数组中的最小数字
- 找出旋转数组中的最小数字
- Java继承之修饰符
- 出国留学学什么专业好,雅思高分助你掌握主动权
- Python学习---第1天---语法、循环、数据结构
- POJ1281 MANAGER 队列+模拟
- A1077 给定N个字符串,求它们的公共后缀,如果不存在公共后缀,则输出“nai“
- 旋转数组中的最小数字
- ssh框架整合:struts2+hibernate+spring(一)
- 静态方法和非静态方法的区别
- 深入分析Java Web中的中文编码问题
- C++输出空心三角形
- 2017_02_25周末信竞总结(上)——NOIP2008
- linux安装mysql之后,需要修改初始密码
- Mac 10进制转换16进制
- 微信开发坑哭了自己Code、OpenID、WXConfig、TOKEN、TICKET处处是坑