leetcode hot 100 56 合併區間

2021-10-19 07:25:05 字數 1692 閱讀 1369

給出乙個區間的集合,請合併所有重疊的區間。

示例 1:

輸入: intervals = [[1,3],[2,6],[8,10],[15,18]]

輸出: [[1,6],[8,10],[15,18]]

解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].

示例 2:

輸入: intervals = [[1,4],[4,5]]

輸出: [[1,5]]

解釋: 區間 [1,4] 和 [4,5] 可被視為重疊區間。

注意:輸入型別已於2023年4月15日更改。 請重置預設**定義以獲取新方法簽名。

intervals[i][0] <= intervals[i][1]

先將二維陣列中的所有子區間按左邊界從小到大排序。

然後遍歷所有的子區間,維護兩個數字,分別是當前合併區間的左邊界和右邊界,每次遍歷時,判斷當前合併的右邊界是否小於下個小區間的左邊界,如果小於的話,說明當前合併區間和下個小區間沒有交集,將當前的左右邊界作為乙個區間的左右邊界存入結果集中,並重置下個合併區間的左右邊界為下個小區間的左右邊界;如果當前合併區間的右邊界大於等於下個小區間的左邊界,說明當前合併區間和下個小區間有交集,把合併區間的右邊界更新為 下個小區間的右邊界和當前合併區間右邊界中的較大值,從而讓合併區間擴張。

最後還需要再將合併區間的左右邊界新增到結果集中一次,因為迴圈中沒有把最後乙個合併區間新增到結果集中。

1 class solution 

6 // 將所有的區間按左區間大小從小到大排序

7 arrays.sort(intervals, new comparator()

11 });

12 int leftborder = intervals[0][0], rightborder = intervals[0][1];

13 int len = intervals.length;

14 arraylistres = new arraylist<>();

15 for(int i = 1; i < len; i++));

19 leftborder = intervals[i][0];

20 rightborder = intervals[i][1];

21 }else

24 }

25 res.add(new int);

26 return res.toarray(new int[res.size()][2]);

27 }

28 }

leetcode 執行用時:7 ms > 90.82%, 記憶體消耗:41 mb > 92.54%

時間複雜度:o(nlogn), n 為陣列長度,時間花費主要分為兩部分,一部分是排序,時間複雜度為o(nlogn), 接下來一次遍歷的時間花費為o(n)。

空間複雜度:o(1), 如果不算上 res 這個結果列表的空間開銷的話,那空間複雜度就是o(1)

leetcode hot 100 55 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。示例 2 輸入...

leetcode hot 100 56 合併區間

給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 intervals 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 intervals 1,4 4,5 輸出 1,5 解釋 區間 1,4 和...

leetcode hot100 1 兩數之和

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...