153. Find Minimum in Rotated Sorted Array
class Solution { public int findMin(int[] nums) { if(nums == null || nums.length == 0){ return 0; } if(nums.length == 1){ return nums[0]; } int start = 0; int end = nums.length - 1; while(start < end){ int mid = start + (end - start) / 2; if(nums[mid] < nums[end]){ end = mid; }else{ start = mid + 1; } } return nums[start]; } }
先找出哪一段是sorted, 然后再根据这个去unsorted 的那部分找 min.
找 target 那道题是 先找出哪一段是sorted, 然后先看 target 在不在 sorted的 那一部分, 如果在, 就根据那一段继续二分, 如果不在, 去 unsorted 的那一段 二分去找。
这俩个题的共同点是先判断哪一段 是 sorted
原数组:0 1 2 4 5 6 7
情况1: 6 7 0 1 2 4 5
情况2: 2 4 5 6 7 0 1
情况1: 6 7 0 1 2 4 5
情况2: 2 4 5 6 7 0 1
(1) A[mid] < A[end]:A[mid : end] sorted => min不在A[mid+1 : end]中
搜索A[start : mid]
(2) A[mid] > A[end]:A[start : mid] sorted且又因为该情况下A[end]<A[start] => min不在A[start : mid]中
搜索A[mid+1 : end]
(3) base case:
a. start = end,必然A[start]为min,为搜寻结束条件。
b. start + 1 = end,此时A[mid] = A[start],而min = min(A[mid], A[end])。而这个条件可以合并到(1)和(2)中。
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
posted on 2018-07-18 08:17 猪猪🐷 阅读(90) 评论(0) 收藏 举报
浙公网安备 33010602011771号