Find Minimum in Rotated Sorted Array 尋找旋轉排序陣列中的最小值
阿新 • • 發佈:2019-01-04
假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,1,2,4,5,6,7]
可能變為 [4,5,6,7,0,1,2]
)。
請找出其中最小的元素。
你可以假設陣列中不存在重複元素。
示例 1:
輸入: [3,4,5,1,2] 輸出: 1
示例 2:
輸入: [4,5,6,7,0,1,2] 輸出: 0
思路:
思路和上一道題一樣,如果中間值nums[mid]<nums[right],則[mid,right]是有序的,如果nums[mid]>nums[right],則[left,mid]是有序的,每次有序的第一個值就是最小值,從而我們去另一邊無序的繼續查詢最小值,當二分查詢完整個陣列後便可以找到最小的數字。
程式碼:
int findMin(vector<int>& nums) { int left = 0; int right = nums.size() - 1; int res = INT_MAX; while (left <= right) { int mid = left + (right - left) / 2; if (nums[mid] > nums[right]) { res = min(res, nums[left]); left = mid + 1; } else { res = min(res, nums[mid]); right = mid - 1; } } return res; }
假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,1,2,4,5,6,7]
可能變為 [4,5,6,7,0,1,2]
)。
請找出其中最小的元素。
你可以假設陣列中不存在重複元素。
示例 1:
輸入: [3,4,5,1,2] 輸出: 1
示例 2:
輸入: [4,5,6,7,0,1,2] 輸出: 0