[Lintcode]Find Minimum in Rotated Sorted Array

来源:互联网 发布:预防域名攻击 编辑:程序博客网 时间:2024/05/18 01:39

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.

Example

Given [4, 5, 6, 7, 0, 1, 2] return 0

直接二分法查找。最终会有两种情况,即指针走到相邻位置,a,b中a大于b或者b大于a。a大于b时,取最左侧。反之,用if(nums[mid] >= nums[left]) left=mid+1跳过a。

public class Solution {    /**     * @param nums: a rotated sorted array     * @return: the minimum number in the array     */    public int findMin(int[] nums) {        return helper(nums, 0, nums.length - 1);    }        int helper(int[] nums, int left, int right) {                while(left < right) {            if(nums[left] < nums[right]) return nums[left];            int mid = (left + right) / 2;            if(nums[mid] >= nums[left]) {                left = mid + 1;            } else {                right = mid;            }        }                return nums[left];    }}




0 0
原创粉丝点击