【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.


题解:就是找数组中第一个“下凹”的地方,可以遍历,不过也可以用二分法,速度更快。

特别注意边界的处理:如果当前的中间值mid在0这个位置,只要考虑它后面的元素是不是小于它;如果在数组最后的位置上,要考虑它前面的元素是不是大于它。最后当发现当前mid所指的值不是所求的“下凹点”的时候,要把它和最后数组的最后一位比较,如果它比数组的最后一位大,说明要找的“下凹点”在mid所指位置的后面,否则在mid所指位置的前面。

JAVA版本代码如下:

 1 import java.awt.datatransfer.StringSelection;

 2 

 3 public class Solution {

 4     public static void main(String[] args){

 5         int num[] = {3,4,5,1,2};

 6         Solution s = new Solution();

 7         System.out.println(s.findMin(num));

 8     }

 9     public int findMin(int[] num) {

10         int begin = 0;

11         int end = num.length-1;

12         while(begin <= end){

13             int mid = (begin + end)/2;

14             if(mid == 0){

15                 if(mid+1 < num.length && num[mid+1] < num[mid])

16                     return num[mid+1];

17                 else {

18                     return num[0];

19                 }

20             }

21             if(mid == num.length-1){

22                 if(mid-1 >=0 && num[mid-1] > num[mid])

23                     return num[mid];

24                 else {

25                     return num[0];

26                 }

27             }

28             if(num[mid-1] > num[mid] && num[mid+1] > num[mid])

29                 return num[mid];

30             

31             if(num[num.length-1] < num[mid])

32                 begin = mid+1;

33             else {

34                 end = mid-1;

35             }

36             

37         }

38         return num[0];

39     }

40 }

 

你可能感兴趣的:(LeetCode)