C++實現(xiàn)LeetCode(153.尋找旋轉(zhuǎn)有序數(shù)組的最小值)
[LeetCode] 153. Find Minimum in Rotated Sorted Array 尋找旋轉(zhuǎn)有序數(shù)組的最小值
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
這道尋找旋轉(zhuǎn)有序數(shù)組的最小值肯定不能通過直接遍歷整個數(shù)組來尋找,這個方法過于簡單粗暴,這樣的話,旋不旋轉(zhuǎn)就沒有意義。應該考慮將時間復雜度從簡單粗暴的 O(n) 縮小到 O(lgn),這時候二分查找法就浮現(xiàn)在腦海。這里是比較難的那一類,沒有固定的 target 值比較,而是要跟數(shù)組中某個特定位置上的數(shù)字比較,決定接下來去哪一邊繼續(xù)搜索。這里用中間的值 nums[mid] 和右邊界值 nums[right] 進行比較,若數(shù)組沒有旋轉(zhuǎn)或者旋轉(zhuǎn)點在左半段的時候,中間值是一定小于右邊界值的,所以要去左半邊繼續(xù)搜索,反之則去右半段查找,最終返回 nums[right] 即可,參見代碼如下:
解法一:
class Solution { public: int findMin(vector<int>& nums) { int left = 0, right = (int)nums.size() - 1; while (left < right) { int mid = left + (right - left) / 2; if (nums[mid] > nums[right]) left = mid + 1; else right = mid; } return nums[right]; } };
下面這種分治法 Divide and Conquer 的解法,這里每次將區(qū)間 [start, end] 從中間 mid 位置分為兩段,分別調(diào)用遞歸函數(shù),并比較返回值,每次取返回值較小的那個即可,參見代碼如下:
解法二:
討論:對于數(shù)組中有重復數(shù)字的情況,請參見另一篇博文 Find Minimum in Rotated Sorted Array II。
Github 同步地址:
https://github.com/grandyang/leetcode/issues/153
類似題目:
Search in Rotated Sorted Array
Find Minimum in Rotated Sorted Array II
參考資料:
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/
到此這篇關(guān)于C++實現(xiàn)LeetCode(153.尋找旋轉(zhuǎn)有序數(shù)組的最小值)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)尋找旋轉(zhuǎn)有序數(shù)組的最小值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++實現(xiàn)LeetCode(904.水果裝入果籃)
- C++實現(xiàn)LeetCode(159.最多有兩個不同字符的最長子串)
- C++實現(xiàn)LeetCode(158.用Read4來讀取N個字符之二 - 多次調(diào)用)
- C++實現(xiàn)LeetCode(157.用Read4來讀取N個字符)
- C++實現(xiàn)LeetCode(156.二叉樹的上下顛倒)
- C++實現(xiàn)LeetCode(155.最小棧)
- C++實現(xiàn)LeetCode(154.尋找旋轉(zhuǎn)有序數(shù)組的最小值之二)
- C++實現(xiàn)LeetCode(160.求兩個鏈表的交點)
相關(guān)文章
C語言中求字符串長度的函數(shù)的幾種實現(xiàn)方法
這篇文章主要介紹了C語言中求字符串長度的函數(shù)的幾種實現(xiàn)方法,需要的朋友可以參考下2018-08-08C/C++運用WMI接口實現(xiàn)查詢系統(tǒng)信息
Windows?Management?Instrumentation(WMI)是一種用于管理和監(jiān)視Windows操作系統(tǒng)的框架,本文主要介紹了如何運用WMI接口實現(xiàn)查詢系統(tǒng)信息,感興趣的可以了解下2023-11-11Qt實現(xiàn)UDP多線程數(shù)據(jù)處理及發(fā)送的簡單實例
本文主要介紹了Qt實現(xiàn)UDP多線程數(shù)據(jù)處理及發(fā)送的簡單實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10