题⽬描述
把⼀个数组最开始的若⼲个元素搬到数组的末尾,我们称之为数组的旋转。
输⼊⼀个⾮递减排序的数组的⼀个旋转,输出旋转数组的最⼩元素。
例如数组 {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) {
- if(array == null || array.length == 0){
- return 0;
- }
- if(array.length == 1){
- return array[0];
- }
- int max = array[0];
-
- for(int i=1; imax){
- max = array[i];
- }
- if(array[i]<max){
- return array[i];
- }
- }
- return 0;
- }
- }
复制代码
- 时间复杂度: ⼆分解法,为O(logN)
- 空间复杂度:没有开辟额外的空间,为 O(1)
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |