leetcode之Find Minimum in Rotated Sorted Array

题目是:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
You may assume no duplicate exists in the array.

什么意思呢?就是说有个整数数组,它可能是多次旋转过的,比如刚开始是[0,1,2,3,4,5,6],旋转之后就是
[4,5,6,7,0,1,2,3].然后求里面的最小值
那这和普通的求最小值有啥分别呢?

当然有区别!!!!

当然可以先对数组排序,然后选择第一个作为返回值,但这样就没有就充分利用数组的特性,数组不管怎么旋转部分都是有序的,我们要充分利用这个信息。

假设数列是n,s是起始下标,e是最后下标,m是中间元素下标。

仔细分析,其实就3种情况:

1.情况1:n[s]

0 1 2 4 5 6 7
这种就是全部有序,直接返回n[s]就行

2.情况2:n[m] > n[s] > n[e]

4 5 6 7 0 1 2
那么最小值一定在m之后,m之前的数据就可以不同考虑啦

3.情况3:n[m] < n[e] < n[s]

6 7 0 1 2 4 5
说明从m到e 数组是上升的,最小值在s到m之间

最后代码:


publicintfindMin(int[]nums){
 if(nums.length==1){
    return nums[0];
}
if(nums.length==2){
      return Math.min(nums[0],nums[1]);
}
ints=0,e=nums.length-1;
intm=(s+e)/2;
if (nums[s] < nums[e]) {
     return nums[s];
}
if(nums[m]>nums[s]){
      return  findMin(Arrays.copyOfRange(nums,m+1,e+1));
}
return  findMin(Arrays.copyOfRange(nums,s,m+1));
}

你可能感兴趣的:(leetcode之Find Minimum in Rotated Sorted Array)