1. 程式人生 > >153. Find Minimum in Rotated Sorted Array - Medium

153. Find Minimum in Rotated Sorted Array - Medium

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

 

binary search

旋轉後的陣列由兩個遞增的部分組成,max在min的左邊,左半部分的元素比右半部分大。

先判斷l,r所對應元素的大小關係,如果nums[l] < nums[r]說明陣列是有序的,沒有旋轉,直接返回nums[l]就行。

然後找中點,判斷nums[mid]和nums[r]的大小關係,如果nums[mid] < nums[r],說明從mid到r這半部分是有序的,最小值應該在左半部分;反之應該在右半部分。最後返回nums[l]

時間:O(logN),空間:O(1)

class Solution {
    public int findMin(int
[] nums) { int l = 0, r = nums.length - 1; if(nums[l] < nums[r]) return nums[l]; // no rotation while(l < r) { int mid = l + (r - l) / 2; if(nums[mid] < nums[r]) r = mid; else l = mid + 1; }
return nums[l]; } }