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