153. Find Minimum in Rotated Sorted Array

Difficulty:
Related Topics:
Similar Questions:

Problem

Suppose an array sorted in ascending order 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.

Example 1:

Input: [3,4,5,1,2] 
Output: 1

Example 2:

Input: [4,5,6,7,0,1,2]
Output: 0

Solution (Java)

class Solution {
    private int findMinUtil(int[] nums, int l, int r) {
        if (l == r) {
            return nums[l];
        }
        int mid = (l + r) / 2;
        if (mid == l && nums[mid] < nums[r]) {
            return nums[l];
        }
        if (mid - 1 >= 0 && nums[mid - 1] > nums[mid]) {
            return nums[mid];
        }
        if (nums[mid] < nums[l]) {
            return findMinUtil(nums, l, mid - 1);
        } else if (nums[mid] > nums[r]) {
            return findMinUtil(nums, mid + 1, r);
        }
        return findMinUtil(nums, l, mid - 1);
    }

    public int findMin(int[] nums) {
        int l = 0;
        int r = nums.length - 1;
        return findMinUtil(nums, l, r);
    }
}

Solution (Javascript)

/**
 * @param {number[]} nums
 * @return {number}
 */
var findMin = function(nums) {
  var left = 0;
  var right = nums.length - 1;
  var mid = 0;
  while (left < right) {
    mid = Math.floor((left + right) / 2);
    if (nums[mid - 1] > nums[mid]) return nums[mid];
    if (nums[mid] < nums[left] || nums[mid] < nums[right]) {
      right = mid - 1;
    } else {
      left = mid + 1;
    }
  }
  return nums[left];
};

Explain:

nope.

Complexity: