php旋转数组找出最小的,LeetCode 153 寻找旋转排序数组中的最小值
鏈接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array
假設按照升序排序的數組在預先未知的某個點上進行了旋轉。
( 例如,數組?[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
這道題首先要想明白,其實思路很簡單,當數組旋轉之后,從開始旋轉的位置到最后一段的數,一定比最左邊的數小,當然也一定比從最左邊到旋轉點的數小。比如[1,2]小于[3,4,5]。這個可以當作二段性。那么我們要找所有比最左邊數小的數中的第一個。但是這樣做會出現一個問題,當數組沒有旋轉的時候,這個性質就不存在了。所以要在前面加一個錯判,沒有旋轉的時候直接返回原數組中的第一個數即可。
c++代碼如下:
1 classSolution {2 public:3 int findMin(vector&nums) {4 if(nums.empty()) returnnums.size();5 if(nums[nums.size() - 1] >= nums[0]) return nums[0];6 int n = nums[0];7 int l = 0, r = nums.size() - 1;8 while(l > 1;10 if(nums[mid] <= n) r =mid;11 else l = mid + 1;12 }13 returnnums[r];14 }15 };
有一種更簡單的方法,可以省略錯判的步驟,我們可以用所有小于旋轉/未旋轉數組中最后一個數作為性質,返回滿足這個性質的第一個點。
c++代碼如下:
1 classSolution {2 public:3 int findMin(vector&nums) {4 if(nums.empty()) returnnums.size();5 int l = 0, r = nums.size() - 1;6 while(l > 1;8 if(nums[mid] <= nums.back()) r =mid;9 else l = mid + 1;10 }11 returnnums[r];12 }13 };
另外還有一個小tips,在c++中,數組的最后一個元素可以用nums.back()來表示,數組是否為空可以用nums.empty()來表示。
總結
以上是生活随笔為你收集整理的php旋转数组找出最小的,LeetCode 153 寻找旋转排序数组中的最小值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优盘怎么恢复隐藏文件 优盘隐藏文件恢复方
- 下一篇: PHP调用tushare,python调