1. 程式人生 > >[LeetCode]153 有序陣列旋轉後的最小值

[LeetCode]153 有序陣列旋轉後的最小值

Find Minimum in Rotated Sorted Array(找到有序陣列旋轉後的最小值)

【難度:Medium】
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.
假設一有序陣列繞某點旋轉,找到其中最小的值,陣列中無重複值出現。

解題思路

本題可使用常規遍歷查詢或是二分查詢來解決。
當使用二分查詢時,要判斷的是中間值nums[mid]與末端值nums[high]的大小比較,

  • 1)若nums[mid]>nums[high],雖然陣列經過旋轉之後順序改變了,但是可以確定最小值出現在[mid+1,high]這部分割槽間之中;
  • 2)否則出現在[low,mid]這部分割槽間之中。

c++程式碼如下:

//二分查詢
class Solution {
public:
    int findMin(vector<int>& nums) {
        if (nums.empty())
            return
0; int low = 0; int high = nums.size()-1; int mid = 0; while (low < high) { mid = (low+high)/2; nums[mid] > nums[high] ? low = mid+1 : high = mid; } return nums[high]; } };
//常規查詢
class Solution {
public:
    int findMin(vector
<int>
& nums) { if (nums.empty()) return 0; int min = nums[0]; for(int i = 1; i < nums.size(); i++) { if (nums[i] < min) min = nums[i]; } return min; } };