摘要:題目思路個人覺得這是一道值得回味的二分法題目。與給出的二分法搜索比,這道題目的是未知的,并且是。我個人是從觀察給出的例子入手的。我本人走的彎路是,過于專注于,從而邏輯變得復雜。其實,,和步就可以幫助我們順利找到最小值。
題目
http://www.lintcode.com/en/pr...
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.
思路個人覺得這是一道值得回味的二分法題目。與給出target的二分法搜索比,這道題目的target是未知的,并且array是rotated。我個人是從觀察給出的例子入手的。
通過觀察這個例子,我們發現以下特征:
最小值是唯一一個比它左右相鄰數字都小的數字
當中位數比start 和 end 都大的時候,最小值在右邊
當中位數比start 和 end 都小的時候,最小值在左邊
當中位數比start大,比end小的時候,我們進入了sorted的array,最小值也是在左邊
那么我們做這道題目的目的,就是通過2,3這兩步,進入最小值所在的sorted的array,從而進行第4步。我本人走的彎路是,過于專注于1,從而邏輯變得復雜。其實2,3,和4步就可以幫助我們順利找到最小值。
代碼class Solution: # @param nums: a rotated sorted array # @return: the minimum number in the array def findMin(self, nums): # write your code here if nums is None or len(nums) == 0: return -1 start = 0 end = len(nums) - 1 while start + 1 < end: mid = start + (end - start) / 2 if nums[mid] > nums[end]: start = mid elif nums[mid] < nums[start] or (nums[mid] < nums[end] and nums[mid] > nums[start]): end = mid return nums[start] if nums[start] < nums[end] else nums[end]體會
這道題目的個人體會就是如果用二分法處理sorted array,核心邏輯在于把已知input分為左右兩部分,再從中入手。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40819.html
摘要:排序數組中找最小值或最大值的題目,很明顯可以使用二分法。因此,只判斷終點和中點元素的大小關系即可。這里有一種情況是上述后三個,中點值和末位相等。此時,兩邊同時遞歸,并返回兩邊遞歸值的較小值。當首位和末位重合,說明已夾逼得到最小值。 Find Minimum in Rotated Sorted Array Problem Suppose a sorted array is rotated...
摘要:二分迭代法復雜度時間空間遞歸棧空間思路找旋轉數組的起點,實際上類似找一個山谷,只要兩邊都比中間高就對了,這和這題很像。 Find Minimum in Rotated Sorted Array I Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 ...
摘要:題目要求假設有一個升序排序的數組,在某個節點處斷開并調換了順序。尋找這個斷開數組中的最小元素。但是如果我們將頭尾的重復元素清楚,而只是在數組中間存在重復元素的話,如,這樣并不會影響升序數組位置的判斷。 題目要求 Suppose an array sorted in ascending order is rotated at some pivot unknown to you befor...
摘要:難度就是說一個從小到大排序好的數組循環移位不知多少次,求最小值。比如全部是的數列,和除了某位置有個,其余全部是的數列,都是合法的。在這里,測試用例也進行了增加,盡量覆蓋各種奇葩情況。 Follow up for Find Minimum in Rotated Sorted Array:What if duplicates are allowed?Would this affect th...
摘要:難度就是說一個從小到大排序好的數組循環移位不知多少次,求最小值。數組無重復值無重復的話就比較簡單,用二分查找即可。當前游標始終是左右游標中點位置,與左右游標的數值比較。解法有幾個要點基本終止條件為左邊的數比當前的數大,那么當前數即是最小值。 Question:Suppose a sorted array is rotated at some pivot unknown to you b...
閱讀 1186·2023-04-25 17:05
閱讀 3011·2021-11-19 09:40
閱讀 3544·2021-11-18 10:02
閱讀 1740·2021-09-23 11:45
閱讀 3022·2021-08-20 09:36
閱讀 2783·2021-08-13 15:07
閱讀 1133·2019-08-30 15:55
閱讀 2459·2019-08-30 14:11