把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个升序的数组的一个旋转,输出旋转数组的最小元素。
例如数组 {3,4,5,1,2}为 {1,2,3,4,5} 的一个旋转,该数组的最小值为 1。
数组可能包含重复项。
注意:数组内所含元素非负,若数组大小为 0,请返回 −1−1。
数据范围
数组长度 [0,90]。
样例
输入:nums = [2, 2, 2, 0, 1]输出:0
题解一:利用二分的思想
class Solution {public int findMin(int[] nums) {if(nums.length==0)return -1;int n = nums.length-1;while(n>0 && nums[n]==nums[0])n--; //消除最右侧的重复元素int left=0,right=n;if(nums[0]<nums[n]) return nums[0]; //初试状态即为有序的while(left < right){int mid = (left+right)/2;if(nums[mid]<nums[0]) right = mid;else left = mid+1;}return nums[right];}
}
题解二:遍历所有元素,找到最小的
class Solution {public int findMin(int[] nums) {if(nums.length==0)return -1;int min = nums[0];for(int i = 0;i<nums.length;i++){if(nums[i]<min)min = nums[i];}return min;}
}