Showing posts with label minimum in rotated array. Show all posts
Showing posts with label minimum in rotated array. Show all posts

Thursday, July 07, 2016

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.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Solution {
    public int findMin(int[] nums) {
        if (nums == null || nums.length == 0) {
            return 0;
        }
         
        int l = 0;
        int r = nums.length - 1;
         
        while (l+1 < r) {//deal with one or two numbers
            int mid = l + (r - l) / 2;
             
            if (nums[l] < nums[r]) {//sorted, no rotation
                return nums[l];
            } else if (nums[mid] < nums[r]) {//right is sorted,pivot point is in left,
            //get rid of right array by redefining r
                r = mid;
            } else if (nums[l] < nums[mid]) {//left is sorted, pivot is in right, 
            //redefine left point by move left to mid
                l = mid;
            }
        }
         
        return Math.min(nums[l], nums[r]);
    }
}