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

貪心算法part5 | ● 435. 無重疊區(qū)間 ● 763.劃分字母區(qū)間 ● 56. 合并區(qū)間

這篇具有很好參考價值的文章主要介紹了貪心算法part5 | ● 435. 無重疊區(qū)間 ● 763.劃分字母區(qū)間 ● 56. 合并區(qū)間。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


435. 無重疊區(qū)間

思路

重疊問題都需要先排好序,再貪心

思路代碼

func eraseOverlapIntervals(intervals [][]int) int {
    sort.Slice(intervals,func(i,j int)bool{
        return intervals[i][1]<intervals[j][1]
    })
    count:=1
    end:=intervals[0][1]
    for i:=1;i<len(intervals);i++{
        if end<=intervals[i][0]{
            end=intervals[i][1]
            count++
        }
    }
    return len(intervals)-count
}

困難

搞清楚左右區(qū)間,重疊的條件。
要找出最少刪除的數(shù)量,也就是找出重疊空間的數(shù)量,然后用長度減去即可。


763.劃分字母區(qū)間

思路

這里提供一種與452.用最少數(shù)量的箭引爆氣球 (opens new window)、435.無重疊區(qū)間 (opens new window)相同的思路。

統(tǒng)計字符串中所有字符的起始和結(jié)束位置,記錄這些區(qū)間(實際上也就是435.無重疊區(qū)間 (opens new window)題目里的輸入),將區(qū)間按左邊界從小到大排序,找到邊界將區(qū)間劃分成組,互不重疊。找到的邊界就是答案。

官方題解

一想到分割字符串就想到了回溯,但本題其實不用回溯去暴力搜索。

題目要求同一字母最多出現(xiàn)在一個片段中,那么如何把同一個字母的都圈在同一個區(qū)間里呢?

如果沒有接觸過這種題目的話,還挺有難度的。

在遍歷的過程中相當(dāng)于是要找每一個字母的邊界,如果找到之前遍歷過的所有字母的最遠邊界,說明這個邊界就是分割點了。此時前面出現(xiàn)過所有字母,最遠也就到這個邊界了。

可以分為如下兩步:

統(tǒng)計每一個字符最后出現(xiàn)的位置
從頭遍歷字符,并更新字符的最遠出現(xiàn)下標(biāo),如果找到字符最遠出現(xiàn)位置下標(biāo)和當(dāng)前下標(biāo)相等了,則找到了分割點

代碼


func partitionLabels(s string) []int {
    var res []int;
    var marks [26]int;
    size, left, right := len(s), 0, 0;
    for i := 0; i < size; i++ {
        marks[s[i] - 'a'] = i;
    }
    for i := 0; i < size; i++ {
        right = max(right, marks[s[i] - 'a']);
        if i == right {
            res = append(res, right - left + 1);
            left = i + 1;
        }
    }
    return res;
}

func max(a, b int) int {
    if a < b {
        a = b;
    }
    return a;
}

困難

將字符串轉(zhuǎn)換為每個字符的起始位置,終止位置


56. 合并區(qū)間

思路

與前面類似但又不同

思路代碼

func merge(intervals [][]int) [][]int {
    res:=[][]int{}
    sort.Slice(intervals,func (i,j int)bool{
        return intervals[i][0]<intervals[j][0]})
    left,right:=intervals[0][0],intervals[0][1]
    for i:=1;i<len(intervals);i++{
        if right<intervals[i][0]{
            res=append(res,[]int{left,right})
            left=intervals[i][0]
            right=intervals[i][1]
        }else{
            right=max(right,intervals[i][1])
        }
    }
    res=append(res,[]int{left,right})
    return res

}

func max(i,j int)int{
    if i>j{
        return i
    }
    return j
}

今日收獲

重疊問題大致分兩類
一類是重疊區(qū)間問題(箭射氣球)
一類是合并區(qū)間問題
做法類似但是處理的邏輯不太相同,左右區(qū)間排序的選擇也有不同。文章來源地址http://www.zghlxwxcb.cn/news/detail-489413.html

到了這里,關(guān)于貪心算法part5 | ● 435. 無重疊區(qū)間 ● 763.劃分字母區(qū)間 ● 56. 合并區(qū)間的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【LeetCode題目詳解】第八章 貪心算法 part05 435. 無重疊區(qū)間 763.劃分字母區(qū)間 56. 合并區(qū)間 (day36補)

    【LeetCode題目詳解】第八章 貪心算法 part05 435. 無重疊區(qū)間 763.劃分字母區(qū)間 56. 合并區(qū)間 (day36補)

    給定一個區(qū)間的集合? intervals ?,其中 intervals[i] = [starti, endi] ?。返回 需要移除區(qū)間的最小數(shù)量,使剩余區(qū)間互不重疊? 。 示例 1: 示例 2: 示例 3: 提示: 1 = intervals.length = 105 intervals[i].length == 2 -5 * 104?= starti? endi?= 5 * 104 相信很多同學(xué)看到這道題目都冥冥之中感覺要排序,但

    2024年02月11日
    瀏覽(21)
  • DAY35 435. 無重疊區(qū)間 + 763.劃分字母區(qū)間 + 56. 合并區(qū)間

    DAY35 435. 無重疊區(qū)間 + 763.劃分字母區(qū)間 + 56. 合并區(qū)間

    題目要求:給定一個區(qū)間的集合,找到需要移除區(qū)間的最小數(shù)量,使剩余區(qū)間互不重疊。 注意: 可以認(rèn)為區(qū)間的終點總是大于它的起點。 區(qū)間 [1,2] 和 [2,3] 的邊界相互“接觸”,但沒有相互重疊。 示例 1: 輸入: [ [1,2], [2,3], [3,4], [1,3] ] 輸出: 1 解釋: 移除 [1,3] 后,剩下的區(qū)間沒

    2024年02月08日
    瀏覽(96)
  • LeetCode 36天 | 435.無重疊區(qū)域 763.劃分字母區(qū)間 56.合并區(qū)間

    435. 無重疊區(qū)間 左邊排序,右邊裁剪為當(dāng)前最小的 763. 劃分字母區(qū)間 自己寫出來的題,雖然之前做過一遍了。 自己的寫法雖然比較難看,但是也列出來了。 再給一個卡爾的寫法 56. 合并區(qū)間 重疊區(qū)域的題目大都要按左邊界先排序。學(xué)了個lambda表達式??梢灾苯訉⒁粋€區(qū)域放

    2024年02月20日
    瀏覽(107)
  • 【Leetcode60天帶刷】day35——452. 用最少數(shù)量的箭引爆氣球,435. 無重疊區(qū)間,763.劃分字母區(qū)間

    【Leetcode60天帶刷】day35——452. 用最少數(shù)量的箭引爆氣球,435. 無重疊區(qū)間,763.劃分字母區(qū)間

    ? 452. 用最少數(shù)量的箭引爆氣球 有一些球形氣球貼在一堵用 XY 平面表示的墻面上。墻面上的氣球記錄在整數(shù)數(shù)組? points ?,其中 points[i] = [xstart, xend] ?表示水平直徑在? xstart ?和? xend 之間的氣球。你不知道氣球的確切 y 坐標(biāo)。 一支弓箭可以沿著 x 軸從不同點? 完全垂直 ?

    2024年02月11日
    瀏覽(91)
  • LeetCode_貪心算法_中等_763.劃分字母區(qū)間

    給你一個字符串 s 。我們要把這個字符串劃分為盡可能多的片段,同一字母最多出現(xiàn)在一個片段中。注意,劃分結(jié)果需要滿足:將所有劃分結(jié)果按順序連接,得到的字符串仍然是 s。返回一個表示每個字符串片段的長度的列表。 示例 1: 輸入:s = “ababcbacadefegdehijhklij” 輸出

    2024年02月14日
    瀏覽(302)
  • LeetCode-763. 劃分字母區(qū)間【貪心 哈希表 雙指針 字符串】

    給你一個字符串 s 。我們要把這個字符串劃分為盡可能多的片段,同一字母最多出現(xiàn)在一個片段中。 注意,劃分結(jié)果需要滿足:將所有劃分結(jié)果按順序連接,得到的字符串仍然是 s 。 返回一個表示每個字符串片段的長度的列表。 示例 1: 輸入:s = “ababcbacadefegdehijhklij” 輸

    2024年04月10日
    瀏覽(97)
  • 劃分字母區(qū)間【貪心算法】

    劃分字母區(qū)間【貪心算法】

    劃分字母區(qū)間 給你一個字符串 s 。我們要把這個字符串劃分為盡可能多的片段,同一字母最多出現(xiàn)在一個片段中。 注意,劃分結(jié)果需要滿足:將所有劃分結(jié)果按順序連接,得到的字符串仍然是 s 。返回一個表示每個字符串片段的長度的列表。 參考下圖: 1.確定每個元素的最

    2024年02月10日
    瀏覽(87)
  • 代碼隨想錄 Leetcode763. 劃分字母區(qū)間
  • 力扣 435. 無重疊區(qū)間

    力扣 435. 無重疊區(qū)間

    題目來源:https://leetcode.cn/problems/non-overlapping-intervals/description/ C++題解1:對區(qū)間進行排序,根據(jù)區(qū)間的末端進行排序,小的在前,大的在后;由于有重復(fù)區(qū)間,我們拿后面的區(qū)間去看是否跟前面的區(qū)間重合,如果后面區(qū)間的前端大于前面區(qū)間的后端,則說明重合;但在排序會

    2024年02月15日
    瀏覽(21)
  • day31貪心算法 用最少數(shù)量的箭引爆氣球 和無重疊區(qū)間

    day31貪心算法 用最少數(shù)量的箭引爆氣球 和無重疊區(qū)間

    題目描述 題目分析: x軸向上射箭,12一支,重疊的需要一支,3-8一支,7-16一支 返回2; 就是讓重疊的氣球盡量在一起,局部最優(yōu);用一支弓箭,全局最優(yōu)就是最少弓箭; 如何去尋找重疊的氣球?和記錄弓箭數(shù)? 1.對所有氣球排序;(左邊界排序如上圖); 2. if 如果第i個氣

    2024年02月16日
    瀏覽(15)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包