Find Minimum in Rotated Sorted Array (旋转数组最小值)

来源:互联网 发布:外国人在中国翻译软件 编辑:程序博客网 时间:2024/05/16 11:55

题目: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.


解题思路:

使用二分查找,需要注意的是为了防止rotated sorted array退化成这种情况,1,2,3,4,5.

在比较的时候需要先和end比较。


代码:

public int findMin(int[] nums) {    if (nums == null || nums.length == 0) {        return -1;    }    int start = 0;    int end = nums.length - 1;    int mid;    while (start + 1 < end) {        mid = start + ((end - start) >> 1);        //为了防止rotated array 蜕化成这种        //1 2 3 4 5 6        //需要先和end 比较        if (nums[mid] <= nums[end]) {            end = mid;        } else {            start = mid;        }    }    if (nums[start] < nums[end]) {        return nums[start];    }    return nums[end];}

题目:Find Minimum in Rotated Sorted Array II

还是上面的题目,唯一的改变是如果rotated sorted array 中有重复的数字呢。


解题思路:

还是使用二分查找,需要注意的是还是开始和end比较,情况同上。

mid等于end的时候,end往前一步。

public int findMin(int[] nums) {    if (nums == null || nums.length == 0) {        return -1;    }    int start = 0;    int end = nums.length - 1;    int mid;    while (start + 1 < end) {        mid = start + ((end -start) >> 1);        if (nums[mid] < nums[end]) {            end = mid;        } else if (nums[mid] > nums[end]) {            start = mid;        } else {            //如果相等则 end 往前一步            --end;        }    }    if (nums[start] < nums[end]) {        return nums[start];    }    return nums[end];} 


————EOF————

0 0
原创粉丝点击