每天一道leetcode56-合併區間

2021-02-20 程式設計師喬戈裡

考試結束,班級平均分只拿到了年級第二,班主任於是問道:大家都知道世界第一高峰珠穆朗瑪峰,有人知道世界第二高峰是什麼嗎?正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2

前言

2018.11.13號打卡
明天的題目:
https://leetcode-cn.com/problems/minimum-path-sum/descrip

題目

每天一道leetcode56-合併區間
分類:數組
中文連結:
https://leetcode-cn.com/problems/merge-intervals/description/
英文連結
https://leetcode.com/problems/merge-intervals/description/

題目詳述

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

題目詳解

思路

首先根據數組中的第一個數字進行排序,[1,3][2,6][8,10]中的就是1,2,8根據這三個數字對二維數組中進行排序

排完序以後,這樣二維數組中的數組就按照第一個數字的大小進行了排序,所以第一個數字是依次遞增的

然後就去比較[1,3]中3與下一個數組中2和6比較大小,如果數字3在2和6之間說明這兩個數組是可以合併的;合併完是[1,6]

[1,6]繼續與[8,10]合併,比較6與8,10,6是小於8的所以這個時候不能合併,只能二維數組的下標i進行i++的操作

這個還有一種情況就是比如是[1,10]與[2,8],10是大於8的這個時候,也可以進行合併

把這三種情況討論一遍進行

代碼

1class Interval {
2      int start;
3      int end;
4      Interval() { start = 0; end = 0; }
5      Interval(int s, int e) { start = s; end = e; }
6  }
7
8
9public List<Interval> merge(List<Interval> intervals) {
10    Collections.sort(intervals, new Comparator<Interval>() {
11        @Override
12        public int compare(Interval o1, Interval o2) {
13            if(o1.start > o2.start)
14                return 1;
15            else if(o1.start < o2.start)
16                return  -1;
17            else
18                return 0;
19        }
20    });
21    int i = 0;
22    while(i < intervals.size())
23    {
24        if(i != intervals.size() - 1)
25        {
26            if(intervals.get(i).end >= intervals.get(i+1).start && intervals.get(i).end <= intervals.get(i+1).end)
27            {
28                int tempStart = intervals.get(i).start;
29                int tempEnd = intervals.get(i+1).end;
30                intervals.remove(i);
31                intervals.get(i).start = tempStart;
32                intervals.get(i).end = tempEnd;
33            }else if(intervals.get(i).end < intervals.get(i+1).start){
34                i++;
35            }else if(intervals.get(i).end > intervals.get(i+1).end){
36                intervals.remove(i+1);
37                i=i;
38            }
39        }else {
40            i++;
41        }
42    }
43    return intervals;
44}

代碼講解

10-20行就是根據第一個數字來進行排序

26行-32行就是去比較 [1,3] [2,6](分別代表intervals.get(i) 和intervals.get(i+1))中3滿足了>=2 且 <= 6 然後就進行合併

33-34行就是[1,3] [5,7]中3 < 5了無法進行合併,i++

35-37行就是[1,10] [2,8] 中 10大於8也可以合併 (看到這裡,你可能會有疑問為啥可以合併了,因為我們在10-20行已經根據第一個數字排序過了,所以前後兩個數組中[a,3],[b,7]比如說這個,a是必然小於等於b的

39-40行,最後一個元素,直接i++

結束語

2018.11.13號打卡

作者喬戈裡親歷2019秋招,哈工大計算機本碩,百度準入職java工程師,歡迎大家關注我的微信公眾號:程式設計師喬戈裡,公眾號有3T編程資源,以及我和我朋友(準入職百度C++工程師)在秋招期間整理的近200M的面試必考的java與C++面經,並有每天一道leetcode打卡群與技術交流群,歡迎關注。

幫戳文末的 獷高 相當於打賞2毛

相關焦點

  • 每天一道leetcode234-回文鍊表
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.6號打卡明天的題目:https://leetcode-cn.com/problems/remove-linked-list-elements/以後明天的題目提取公布一下哈,因為有些朋友想提前做一下~題目 leetcode234-回文鍊表中文連結:https
  • [LeetCode] 912. Sort an Array 數組排序
    在 LeetCode 中也有一道使用這個算法思想的題 Kth Largest Element in an Array。快排的精髓在於選一個 pivot,然後將所有小於 pivot 的數字都放在左邊,大於 pivot 的數字都放在右邊,等於的話放哪邊都行。
  • LeetCode刷題第三周【數組(簡單)】
    因此我們可以通過判斷 distance 和 k 的大小,來知道我們要找的數所在的區間。我們同樣也可以通過 distance 計算出,我們需要的值。合併兩個有序數組(難度:簡單)Oct.30 刷題請點擊或見附錄:88. 合併兩個有序數組[5]題目要求:給你兩個有序整數數組 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為一個有序數組。初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。
  • 每天一道算法題(第三十二期)
    +obj[i]    }    for(let i in obj){        if(obj[i] > (nums.length/2 | 0) ){            return i        }    }    return -1};合併兩個排序列表
  • LeetCode數組類知識點&題型總結
    這類題目通常會給一個包含多個子數組的數組,然後針對區間是否重合來判斷true or false。1.按start排序2.在前一個區間的end和後一個區間的start找交集例題:252 meeting room[easy](https://leetcode.com/problems/meeting-rooms/)題目理解:給定一個數組,包含每個會議的開始時間和結束時間[[s1,e1],[s2,e2],...]
  • 每日一道 LeetCode (15):二進位求和
    ❝每天 3 分鐘,走上算法的逆襲之路。❞前文合集每日一道 LeetCode 前文合集代碼倉庫GitHub:https://github.com/meteor1993/LeetCodeGitee:https://gitee.com/inwsy/LeetCode
  • [LeetCode] 850. Rectangle Area II 矩形面積之二
    否則的話則取出 start 位置上的矩形 rec,此時就要判斷當前要加入的矩形和這個 rec 矩形是否有重疊,這在 LeetCode 中有專門一道題是考察這個的 Rectangle Overlap,這裡用的就是那道題的判斷方法,假如判斷出當前矩形 cur 和矩形 rec 沒有交集,就直接對 all 數組中下一個矩形調用遞歸函數,並返回即可。
  • Go 刷 leetcode|一道簡單難度卻讓我陷入沉思的題目
    今天為大家講解 LeetCode 第 53 題,繼續為大家帶來一道常考的數組題目
  • LeetCode面試系列 第6天:No.9 - 迴文數
    今天我們來分析一道相對輕鬆的字符串面試題吧,恰好大家從Python 100天中學到的字符串知識可以派上用場。Leetcode今天要給大家分析的面試題是 LeetCode 上第 9 號問題,LeetCode - 9.
  • leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • leetcode雞蛋掉落問題(egg drop)
    搜索後發現是leetcode上的一道經典面試題~因為過於經典,已經被踢出google面試題庫了(。)那我們就直接看看leetcode上的題目叭!leetcode現在有中文站,看起來更方便了:https://leetcode-cn.com/problems/super-egg-drop/solution/--你將獲得 K 個雞蛋,並可以使用一棟從 1 到 N  共有 N 層樓的建築。每個蛋的功能都是一樣的,如果一個蛋碎了,你就不能再把它掉下去。
  • 通關LeetCode刷題完整攻略,省時又高效
    Pattern: Merge Intervals,區間合併類型區間合併模式是一個用來處理有區間重疊的很高效的技術。在設計到區間的很多問題中,通常咱們需要要麼判斷是否有重疊,要麼合併區間,如果他們重疊的話。
  • Leetcode刷題No.234
    今天的題目就是一道套路題。https://leetcode-cn.com/problems/palindrome-linked-list
  • ​LeetCode刷題實戰137:只出現一次的數字 II
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做只出現一次的數字 II,我們先來看題面:https://leetcode-cn.com/problems/single-number-ii/Given an integer array nums where every element appears three times except for one, which appears exactly
  • 給你代碼:leetcode隨筆
    而如果是數據data,目標是對象是會被合併,其他類型就會相互覆蓋。好了看到這,我就鬱悶了,這所謂的相互覆蓋是什麼意思?組件的初始數據*/data: {cba: { y: 2 }, // 測試 ['ch2'], 1, '1312'cbaO: { b: 1 }},attached: function () {//列印變量}})可以看出:組件cbaO和behavior cbaO是會被合併
  • ​LeetCode刷題實戰15題: 三數之和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做三數之和 ,我們先來看題面:https://leetcode.com/problems/3sum/描述給定一個整數的數組,要求尋找當中所有的a,b,c三個數的組合,使得三個數的和為0.注意,
  • ​LeetCode刷題實戰53:最大子序和
    所以,為了提高大家的算法能力,這個公眾號後續每天帶大家做一道算法題,題目就從LeetCode上面選 !今天和大家聊的問題叫做 最大子序和,我們先來看題面:https://leetcode-cn.com/problems/maximum-subarray/Given an integer array nums, find the contiguous subarray (containing at least one number
  • leetcode鍊表之回文鍊表
    序本文主要記錄一下leetcode鍊表之回文鍊表題目
  • [LeetCode] 976. Largest Perimeter Triangle 最大周長的三角形
    if (A[i] < A[i - 1] + A[i - 2]) { return A[i] + A[i - 1] + A[i - 2]; } } return 0; }};Github 同步地址:https://github.com/grandyang/leetcode