国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法沉淀——貪心算法六(leetcode真題剖析)

這篇具有很好參考價值的文章主要介紹了算法沉淀——貪心算法六(leetcode真題剖析)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

算法沉淀——貪心算法六(leetcode真題剖析),算法沉淀,算法,貪心算法,leetcode

01.壞了的計算器

題目鏈接:https://leetcode.cn/problems/broken-calculator/

在顯示著數(shù)字 startValue 的壞計算器上,我們可以執(zhí)行以下兩種操作:

  • **雙倍(Double):**將顯示屏上的數(shù)字乘 2;
  • **遞減(Decrement):**將顯示屏上的數(shù)字減 1 。

給定兩個整數(shù) startValuetarget 。返回顯示數(shù)字 target 所需的最小操作數(shù)。

示例 1:

輸入:startValue = 2, target = 3
輸出:2
解釋:先進行雙倍運算,然后再進行遞減運算 {2 -> 4 -> 3}.

示例 2:

輸入:startValue = 5, target = 8
輸出:2
解釋:先遞減,再雙倍 {5 -> 4 -> 8}.

示例 3:

輸入:startValue = 3, target = 10
輸出:3
解釋:先雙倍,然后遞減,再雙倍 {3 -> 6 -> 5 -> 10}.

思路

這里我們采用逆向思維的方式,更容易找到最短的計算次數(shù),即使用目標值進行除法和加法運算逆推。

代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-847954.html

class Solution {
public:
    int brokenCalc(int startValue, int target) {
        int ret=0;
        while(target>startValue){
            if(target%2) target++;
            else target/=2;
            ret++;
        }
        return ret+startValue-target;
    }
};

02.合并區(qū)間

題目鏈接:https://leetcode.cn/problems/merge-intervals/

以數(shù)組 intervals 表示若干個區(qū)間的集合,其中單個區(qū)間為 intervals[i] = [starti, endi] 。請你合并所有重疊的區(qū)間,并返回 一個不重疊的區(qū)間數(shù)組,該數(shù)組需恰好覆蓋輸入中的所有區(qū)間 。

示例 1:

輸入:intervals = [[1,3],[2,6],[8,10],[15,18]]
輸出:[[1,6],[8,10],[15,18]]
解釋:區(qū)間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].

示例 2:

輸入:intervals = [[1,4],[4,5]]
輸出:[[1,5]]
解釋:區(qū)間 [1,4] 和 [4,5] 可被視為重疊區(qū)間。 

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

思路

這里我們要使用貪心思想,首先需要對整體進行排序,通過不斷比較更新數(shù)組右區(qū)間的值,得到最大長度的區(qū)間數(shù)組。

代碼

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end());

        int left=intervals[0][0],right=intervals[0][1];
        vector<vector<int>> ret;
        for(int i=1;i<intervals.size();i++){
            int a=intervals[i][0],b=intervals[i][1];
            if(a<=right) right=max(right,b);
            else{
                ret.push_back({left,right});
                left=a;
                right=b;
            }
        }
        ret.push_back({left,right});
        return ret;
    }
};

03.無重疊區(qū)間

題目鏈接:https://leetcode.cn/problems/non-overlapping-intervals/

給定一個區(qū)間的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除區(qū)間的最小數(shù)量,使剩余區(qū)間互不重疊 。

示例 1:

輸入: intervals = [[1,2],[2,3],[3,4],[1,3]]
輸出: 1
解釋: 移除 [1,3] 后,剩下的區(qū)間沒有重疊。

示例 2:

輸入: intervals = [ [1,2], [1,2], [1,2] ]
輸出: 2
解釋: 你需要移除兩個 [1,2] 來使剩下的區(qū)間沒有重疊。

示例 3:

輸入: intervals = [ [1,2], [2,3] ]
輸出: 0
解釋: 你不需要移除任何區(qū)間,因為它們已經(jīng)是無重疊的了。 

提示:

  • 1 <= intervals.length <= 105
  • intervals[i].length == 2
  • -5 * 104 <= starti < endi <= 5 * 104

思路

首先我們按左端點排序,當兩個區(qū)間重疊的時候,為了能保留更多的區(qū)間,我們應移除右端點較大的區(qū)間,代碼的實現(xiàn)類似上一題

代碼

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end());
        int ret=0;
        int left=intervals[0][0],right=intervals[0][1];
        for(int i=1;i<intervals.size();i++){
            int a=intervals[i][0],b=intervals[i][1];
            if(a<right){
                ret++;
                right=min(right,b);
            }
            else right=b;
        }
        return ret;
    }
};

04.用最少數(shù)量的箭引爆氣球

題目鏈接:https://leetcode.cn/problems/minimum-number-of-arrows-to-burst-balloons/

有一些球形氣球貼在一堵用 XY 平面表示的墻面上。墻面上的氣球記錄在整數(shù)數(shù)組 points ,其中points[i] = [xstart, xend] 表示水平直徑在 xstartxend之間的氣球。你不知道氣球的確切 y 坐標。

一支弓箭可以沿著 x 軸從不同點 完全垂直 地射出。在坐標 x 處射出一支箭,若有一個氣球的直徑的開始和結(jié)束坐標為 x``startx``end, 且滿足 xstart ≤ x ≤ x``end,則該氣球會被 引爆 ??梢陨涑龅墓臄?shù)量 沒有限制 。 弓箭一旦被射出之后,可以無限地前進。

給你一個數(shù)組 points返回引爆所有氣球所必須射出的 最小 弓箭數(shù) 。

示例 1:

輸入:points = [[10,16],[2,8],[1,6],[7,12]]
輸出:2
解釋:氣球可以用2支箭來爆破:
-在x = 6處射出箭,擊破氣球[2,8]和[1,6]。
-在x = 11處發(fā)射箭,擊破氣球[10,16]和[7,12]。

示例 2:

輸入:points = [[1,2],[3,4],[5,6],[7,8]]
輸出:4
解釋:每個氣球需要射出一支箭,總共需要4支箭。

示例 3:

輸入:points = [[1,2],[2,3],[3,4],[4,5]]
輸出:2
解釋:氣球可以用2支箭來爆破:
- 在x = 2處發(fā)射箭,擊破氣球[1,2]和[2,3]。
- 在x = 4處射出箭,擊破氣球[3,4]和[4,5]。

提示:

  • 1 <= points.length <= 105
  • points[i].length == 2
  • -231 <= xstart < xend <= 231 - 1

思路

按照左端點排序,這樣互相重疊的區(qū)間都是連續(xù)的,這樣,我們在射箭的時候,要發(fā)揮每一支箭最大的作用,應該把互相重疊的區(qū)間統(tǒng)一引爆。因為我們是按左端點排序的,因此對于兩個區(qū)間,我們求的是他們的交集,左端點為兩個區(qū)間左端點的最大值,右端點為兩個區(qū)間的右端點的最小值。

代碼

class Solution {
public:
    int findMinArrowShots(vector<vector<int>>& points) {
        sort(points.begin(),points.end());
        int right=points[0][1];
        int count=1;
        for(int i=1;i<points.size();i++){
            int a=points[i][0],b=points[i][1];
            if(a<=right) right=min(right,b);
            else count++,right=b;
        }
        return count;
    }
};

到了這里,關(guān)于算法沉淀——貪心算法六(leetcode真題剖析)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 算法沉淀——貪心算法七(leetcode真題剖析)

    算法沉淀——貪心算法七(leetcode真題剖析)

    題目鏈接:https://leetcode.cn/problems/integer-replacement/ 給定一個正整數(shù) n ,你可以做如下操作: 如果 n 是偶數(shù),則用 n / 2 替換 n 。 如果 n 是奇數(shù),則可以用 n + 1 或 n - 1 替換 n 。 返回 n 變?yōu)?1 所需的 最小替換次數(shù) 。 示例 1: 示例 2: 示例 3: 提示: 1 = n = 2^31 - 1 思路 這里我們

    2024年03月23日
    瀏覽(24)
  • 算法沉淀——棧(leetcode真題剖析)

    算法沉淀——棧(leetcode真題剖析)

    棧(Stack)是一種基于先進后出(Last In, First Out,LIFO)原則的數(shù)據(jù)結(jié)構(gòu)。棧具有兩個主要的操作: 壓棧(Push) :將元素添加到棧的頂部。 出棧(Pop) :從棧的頂部移除元素。 棧常常用于需要反轉(zhuǎn)操作順序的場景,或者在需要記錄操作歷史的情況下。在算法中,棧的應用廣

    2024年02月20日
    瀏覽(18)
  • 算法沉淀——遞歸(leetcode真題剖析)

    算法沉淀——遞歸(leetcode真題剖析)

    遞歸是一種通過調(diào)用自身的方式來解決問題的算法。在遞歸算法中,問題被分解為更小的相似子問題,然后通過對這些子問題的解進行組合來解決原始問題。遞歸算法通常包含兩個主要部分: 基本情況(Base Case): 定義問題的最小規(guī)模,直接解答而不再進行遞歸。基本情況

    2024年02月20日
    瀏覽(19)
  • 算法沉淀——多源 BFS(leetcode真題剖析)

    算法沉淀——多源 BFS(leetcode真題剖析)

    多源 BFS 是指從多個源點同時進行廣度優(yōu)先搜索的算法。在傳統(tǒng)的 BFS 中,我們通常從一個起始點開始,逐層遍歷所有的相鄰節(jié)點。而在多源 BFS 中,我們可以同時從多個源點開始,從這些源點出發(fā),逐層向外擴展,直到達到目標或者遍歷完整個圖。 多源 BFS 可以用于解決一些

    2024年02月19日
    瀏覽(25)
  • 算法沉淀——BFS 解決 FloodFill 算法(leetcode真題剖析)

    算法沉淀——BFS 解決 FloodFill 算法(leetcode真題剖析)

    BFS(廣度優(yōu)先搜索)解決 Flood Fill 算法的基本思想是通過從起始點開始,逐層向外擴展,訪問所有與起始點相連且具有相同特性(顏色等)的區(qū)域。在 Flood Fill 中,通常是通過修改圖像的像素顏色。 下面是 BFS 解決 Flood Fill 算法的步驟: 初始化: 將起始點的顏色修改為新的

    2024年02月20日
    瀏覽(15)
  • 算法沉淀——優(yōu)先級隊列(堆)(leetcode真題剖析)

    算法沉淀——優(yōu)先級隊列(堆)(leetcode真題剖析)

    優(yōu)先隊列(Priority Queue)是一種抽象數(shù)據(jù)類型,它類似于隊列(Queue),但是每個元素都有一個關(guān)聯(lián)的優(yōu)先級。在優(yōu)先隊列中,元素按照優(yōu)先級從高到低(或從低到高)排列,高優(yōu)先級的元素先出隊。這種數(shù)據(jù)結(jié)構(gòu)可以用堆(Heap)來實現(xiàn)。 堆是一種二叉樹結(jié)構(gòu),有兩種主要類

    2024年02月22日
    瀏覽(29)
  • 算法沉淀——BFS 解決拓撲排序(leetcode真題剖析)

    算法沉淀——BFS 解決拓撲排序(leetcode真題剖析)

    Breadth-First Search (BFS) 在拓撲排序中的應用主要是用來解決有向無環(huán)圖(DAG)的拓撲排序問題。拓撲排序是對有向圖中所有節(jié)點的一種線性排序,使得對于每一條有向邊 (u, v),節(jié)點 u 在排序中都出現(xiàn)在節(jié)點 v 的前面。如果圖中存在環(huán)路,則無法進行拓撲排序。 BFS 解決拓撲排序

    2024年02月21日
    瀏覽(26)
  • 算法沉淀——BFS 解決最短路問題(leetcode真題剖析)

    算法沉淀——BFS 解決最短路問題(leetcode真題剖析)

    BFS (廣度優(yōu)先搜索)是解決最短路徑問題的一種常見算法。在這種情況下,我們通常使用BFS來查找從一個起始點到目標點的最短路徑。 具體步驟如下: 初始化: 從起始點開始,將其放入隊列中,并標記為已訪問。 BFS遍歷: 不斷從隊列中取出頂點,然后探索與該頂點相鄰且

    2024年02月20日
    瀏覽(20)
  • 算法沉淀——窮舉、暴搜、深搜、回溯、剪枝綜合練習一(leetcode真題剖析)

    算法沉淀——窮舉、暴搜、深搜、回溯、剪枝綜合練習一(leetcode真題剖析)

    題目鏈接:https://leetcode.cn/problems/permutations/ 給定一個不含重復數(shù)字的數(shù)組 nums ,返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1: 示例 2: 示例 3: 提示: 1 = nums.length = 6 -10 = nums[i] = 10 nums 中的所有整數(shù) 互不相同 思路 這是一個典型的回溯問題,需要在每

    2024年02月21日
    瀏覽(23)
  • 2023華為OD機試真題【區(qū)間交疊/貪心算法】【Python Java】

    2023華為OD機試真題【區(qū)間交疊/貪心算法】【Python Java】

    給定坐標軸上的一組線段,線段的起點和終點均為整數(shù)并且長度不小于1,請你從中找到最少數(shù)量的線段,這些線段可以覆蓋住所有線段。 輸入描述 第一行輸入為所有線段的數(shù)量,不超過10000,后面每行表示一條線段,格式為”x,y”, x和y 分別表示起點和終點,取值范圍是

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包