最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)LeetCode(154.尋找旋轉(zhuǎn)有序數(shù)組的最小值之二)

 更新時間:2021年07月29日 16:16:12   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(154.尋找旋轉(zhuǎn)有序數(shù)組的最小值之二),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

[LeetCode] 154. Find Minimum in Rotated Sorted Array II 尋找旋轉(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.

The array may contain duplicates.

Example 1:

Input: [1,3,5]
Output: 1

Example 2:

Input: [2,2,2,0,1]
Output: 0

Note:

這道尋找旋轉(zhuǎn)有序重復數(shù)組的最小值是之前那道 Find Minimum in Rotated Sorted Array 的拓展,當數(shù)組中存在大量的重復數(shù)字時,就會破壞二分查找法的機制,將無法取得 O(lgn) 的時間復雜度,又將會回到簡單粗暴的 O(n),比如這兩種情況:{2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 1, 2} 和 {2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2},可以發(fā)現(xiàn),當?shù)谝粋€數(shù)字和最后一個數(shù)字,還有中間那個數(shù)字全部相等的時候,二分查找法就崩潰了,因為它無法判斷到底該去左半邊還是右半邊。這種情況下,將右指針左移一位(或者將左指針右移一位),略過一個相同數(shù)字,這對結(jié)果不會產(chǎn)生影響,因為只是去掉了一個相同的,然后對剩余的部分繼續(xù)用二分查找法,在最壞的情況下,比如數(shù)組所有元素都相同,時間復雜度會升到 O(n),參見代碼如下:

解法一:

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 if (nums[mid] < nums[right]) right = mid;
            else --right;
        }
        return nums[right];
    }
};

跟之前那道 Find Minimum in Rotated Sorted Array 一樣,還是可以用分治法 Divide and Conquer 來解,不過寫法跟之前那道略有不同,只有在 nums[start] < nums[end] 的時候,才能返回 nums[start],等于的時候不能返回,比如 [3, 1, 3] 這個數(shù)組,或者當 start 等于 end 成立的時候,也可以直接返回 nums[start],后面的操作跟之前那道題相同,每次將區(qū)間 [start, end] 從中間 mid 位置分為兩段,分別調(diào)用遞歸函數(shù),并比較返回值,每次取返回值較小的那個即可,參見代碼如下:

解法二:

class Solution {
public:
    int findMin(vector<int>& nums) {
        return helper(nums, 0, (int)nums.size() - 1);
    }
    int helper(vector<int>& nums, int start, int end) {
        if (start == end) return nums[start];
        if (nums[start] < nums[end]) return nums[start];
        int mid = (start + end) / 2;
        return min(helper(nums, start, mid), helper(nums, mid + 1, end));
    }
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/154

類似題目:

Find Minimum in Rotated Sorted Array

參考資料:

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/discuss/48808/My-pretty-simple-code-to-solve-it

https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/discuss/167981/Beats-100-Binary-Search-with-Explanations

到此這篇關(guān)于C++實現(xiàn)LeetCode(154.尋找旋轉(zhuǎn)有序數(shù)組的最小值之二)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)尋找旋轉(zhuǎn)有序數(shù)組的最小值之二內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ MD5的源碼實例詳解

    C++ MD5的源碼實例詳解

    這篇文章主要介紹了C++ MD5的源碼實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語言重難點之內(nèi)存對齊和位段

    C語言重難點之內(nèi)存對齊和位段

    這篇文章主要介紹了C語言重難點之內(nèi)存對齊和位段,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • C++字符數(shù)組、字符數(shù)組指針和string類

    C++字符數(shù)組、字符數(shù)組指針和string類

    這篇文章主要介紹了C++字符數(shù)組、字符數(shù)組指針和string類,string是一個類而不是基本數(shù)據(jù)類型,數(shù)組不含有處理函數(shù),下面更多詳細內(nèi)容,需要的小伙伴可以參考下面文章
    2022-03-03
  • C語言位圖算法詳解

    C語言位圖算法詳解

    這篇文章主要介紹了C語言實現(xiàn)的位圖算法,主要包括了位圖算法的定義與應用,對于C程序算法設計的學習有一定的借鑒價值,需要的朋友可以參考下
    2014-09-09
  • 虛函數(shù)與純虛函數(shù)(C++與Java虛函數(shù)的區(qū)別)的深入分析

    虛函數(shù)與純虛函數(shù)(C++與Java虛函數(shù)的區(qū)別)的深入分析

    本篇文章是對虛函數(shù)與純虛函數(shù)進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 提升編程能力的C語言技巧總結(jié)

    提升編程能力的C語言技巧總結(jié)

    這篇文章主要為大家總結(jié)了一些C語言技巧的相關(guān)資料,可以幫助大家大大提升編程能力。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-12-12
  • c文件匯編后函數(shù)參數(shù)傳遞的不同之處

    c文件匯編后函數(shù)參數(shù)傳遞的不同之處

    在w7 32位系統(tǒng)下把c文件匯編后,確實與mac后的差異很大。可不僅僅是寄存器eax與rax的區(qū)別。我想說的是函數(shù)參數(shù)傳遞的不同
    2013-11-11
  • C語言進階教程之字符串&內(nèi)存函數(shù)

    C語言進階教程之字符串&內(nèi)存函數(shù)

    對于字符,在計算機內(nèi)部都是用數(shù)字(字符編碼)來表示的,而字符串是“字符連續(xù)排列”的一種表現(xiàn),這篇文章主要給大家介紹了關(guān)于C語言進階教程之字符串&內(nèi)存函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 深入理解c/c++ 內(nèi)存對齊

    深入理解c/c++ 內(nèi)存對齊

    這篇文章主要介紹了c/c++ 內(nèi)存對齊,有需要的朋友可以參考一下
    2014-01-01
  • Qt 添加MSVC2017編譯器的完整教程(保姆級)

    Qt 添加MSVC2017編譯器的完整教程(保姆級)

    本文主要介紹了Qt 添加MSVC2017編譯器的完整教程,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06

最新評論

武鸣县| 洪江市| 清丰县| 原平市| 抚松县| 黑龙江省| 广饶县| 沂南县| 靖安县| 梁山县| 泉州市| 绥中县| 通渭县| 乳源| 遵义市| 田林县| 鄂州市| 三门县| 阿城市| 甘肃省| 噶尔县| 白朗县| 武宁县| 新宾| 仁化县| 滦平县| 贺州市| 利津县| 陵川县| 中山市| 玛曲县| 桐乡市| 南江县| 景谷| 化州市| 瑞金市| 宝山区| 济源市| 金秀| 凉城县| 安丘市|