[Leedcode][JAVA][第56题][合并区间][数组][贪心算法]
生活随笔
收集整理的這篇文章主要介紹了
[Leedcode][JAVA][第56题][合并区间][数组][贪心算法]
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【問題描述】56.合并區(qū)間
給出一個(gè)區(qū)間的集合,請(qǐng)合并所有重疊的區(qū)間。 示例 1: 輸入: [[1,3],[2,6],[8,10],[15,18]] 輸出: [[1,6],[8,10],[15,18]] 解釋: 區(qū)間 [1,3] 和 [2,6] 重疊, 將它們合并為 [1,6].【解答思路】
1. 雙指針
左邊位置一定是確定,就是 a[0],而右邊位置是 max(a[1], b[1])
時(shí)間復(fù)雜度:O(N) 空間復(fù)雜度:O(1)
2. 棧思想(威威)
- 如果當(dāng)前遍歷到的區(qū)間的左端點(diǎn) > 結(jié)果集中最后一個(gè)區(qū)間的右端點(diǎn),說明它們沒有交集,此時(shí)把區(qū)間添加到結(jié)果集;
- 如果當(dāng)前遍歷到的區(qū)間的左端點(diǎn) <= 結(jié)果集中最后一個(gè)區(qū)間的右端點(diǎn),說明它們有交集,此時(shí)產(chǎn)生合并操作,即:對(duì)結(jié)果集中最后一個(gè)區(qū)間的右端點(diǎn)更新(取兩個(gè)區(qū)間的最大值)。
時(shí)間復(fù)雜度:O(N) 空間復(fù)雜度:O(1)
【總結(jié)】
1. Java 數(shù)組題 轉(zhuǎn)化 List
List<int[]> res = new ArrayList<>(); res.add(new int[] { left, right }); res.toArray(new int[0][]);2. Java中Arrays.sort()的幾種用法
- Arrays.sort(int[] a) 對(duì)一個(gè)數(shù)組的所有元素進(jìn)行排序,并且是按從小到大的順序
- Arrays.sort(int[] a, int fromIndex, int toIndex) 對(duì)數(shù)組部分排序,也就是對(duì)數(shù)組a的下標(biāo)從fromIndex到toIndex-1的元素排序,注意:下標(biāo)為toIndex的元素不參與排序
- public static void sort(T[] a,int fromIndex, int toIndex, Comparator<? super T> c) Comparator類型的參數(shù)
- 和物理現(xiàn)象相關(guān)的
- 本身問題描述就和圖形相關(guān)的問題
- 鏈表問題
- 回溯算法問題
- 動(dòng)態(tài)規(guī)劃問題
- 貪心算法(Greedy Algorithm)是指:在對(duì)問題求解時(shí),總是做出在當(dāng)前看來是最好的選擇。也就是不從整體最優(yōu)上加以考慮,貪心算法所做出決策是在某種意義上的局部最優(yōu)解。
- 可以適用貪心的問題就是每一步局部最優(yōu),最后導(dǎo)致結(jié)果全局最優(yōu)。
- 必須具備無后效性,,即某個(gè)狀態(tài)以前的過程不會(huì)影響以后的狀態(tài),只與當(dāng)前狀態(tài)有關(guān)
- 由于貪心算法適用的場(chǎng)景一般都是在一組決策里選擇最大或者最小值,因此常常在使用貪心算法之前,需要先對(duì)數(shù)據(jù)按照某種規(guī)則排序
- 一旦貪心選擇性質(zhì)不成立,可以考慮的另一種算法思想就是「動(dòng)態(tài)規(guī)劃」。「動(dòng)態(tài)規(guī)劃」在每一步做決策的時(shí)候,就不只考慮當(dāng)前步驟的最優(yōu)解。
- 貪心算法應(yīng)用
- 對(duì)數(shù)據(jù)壓縮編碼的霍夫曼編碼(Huffman Coding)
- 求最小生成樹的 Prim 算法和 Kruskal 算法
- 求單源最短路徑的Dijkstra算法
總結(jié)
以上是生活随笔為你收集整理的[Leedcode][JAVA][第56题][合并区间][数组][贪心算法]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate5-多对1(n:1)-
- 下一篇: keil教程——解压缩BCD码