leetcode原题链接
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
示例
输入:[3,4,5,1,2] 输出:1
解题思路
这题我看到的时候也是很懵啊,索性直接遍历找最小值。
class Solution { public int minArray(int[] numbers) { int min=numbers[0]; for(int item:numbers){ min=Math.min(min,item); } return min; } }
哈哈哈,当然考察的不会这么简单咯。
这道题主要思路就是如何通过二分法去优化时间复杂度,走你!
public int minArray(int[] numbers) { int l = 0, r = numbers.length - 1; while (l < r) { int mid = ((r - l) >> 1) + l; //只要右边比中间大,那右边一定是有序数组 if (numbers[r] > numbers[mid]) { r = mid; } else if (numbers[r] < numbers[mid]) { l = mid + 1; //去重 } else r--; } return numbers[l]; }
又一道又一道!!!
加油!!!