[leetcode]Find Minimum in Rotated Sorted Array

来源:互联网 发布:数据库索引怎么建立 编辑:程序博客网 时间:2024/05/29 09:40
From : https://leetcode.com/problems/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.

class Solution {public:    int findMin(vector<int>& nums) {        if(nums.front()<nums.back()) return nums[0];        int start=0, end=nums.size()-1;        while(start<end) {            if(start+1==end) return min(nums[start], nums[end]);            int mid = (start+end)>>1;            if(nums[mid]==nums[start] && nums[mid]==nums[end]) return check(nums, start, end);            if(nums[mid]>=nums[start]) {                start = mid;            } else {                end = mid;            }        }        return nums[start];    }    int check(vector<int>& nums, int start, int end) {        int min = nums[start];        for(int i=start+1; i<=end;i++) {            if(nums[i]<min) min=nums[i];        }        return min;    }};

public class Solution {    public int findMin(int[] nums) {        if (nums == null) {return 0;}int l = 0, r = nums.length - 1;int ans = nums[0];while (l <= r) {if (nums[l] < nums[r]) {return ans < nums[l] ? ans : nums[l];}int m = (l + r) >> 1;if (nums[m] < ans) {ans = nums[m];}if (nums[m] >= nums[l]) {l = m + 1;} else {r = m - 1;}}return ans;    }}


0 0