BiruLyu
7/29/2017 - 6:11 PM

153. Find Minimum in Rotated Sorted Array(#).java

public class Solution {
    public int findMin(int[] nums) {
        int left = 0;
        int right = nums.length - 1;

        while(left < right) {
          int middle = left + (right - left)/2 ;
          
          if(nums[left] < nums[right]) {
              return nums[left];
          }
          else if(nums[middle] < nums[(middle + 1) % nums.length] &&
                  nums[middle] < nums[(middle - 1 + nums.length) % nums.length]) {
              return nums[middle];
          }
          else if(nums[left] <= nums[middle]) {
              left = middle + 1;
          }
          else {
              right = middle - 1;
          }
        }
        
        return nums[left];
    }
}
public class Solution {
    public int findMin(int[] nums) {
        if (nums == null || nums.length < 1) return -1;
        int start = 0;
        int end = nums.length - 1;
        while (start < end) {
            if (nums[start] < nums[end]) return nums[start];
            
            int mid = start + (end - start) / 2;
            if (nums[mid] >= nums[start]) {
                start = mid + 1;
            } else {
                end = mid;
            }
        }
        return nums[start];
    }
}

/*
[1]
[6,7,8,-1,0,1,2,4,5]
[2,4,4,5,6,6,7,7,7,0,1,2,2]
*/