貪心 Leetcode 56 合并區間

合并區間

Leetcode 56

學習記錄自代碼隨想錄

以數組 intervals 表示若干個區間的集合,其中單個區間為 intervals[i] = [starti, endi] 。請你合并所有重疊的區間,并返回 一個不重疊的區間數組,該數組需恰好覆蓋輸入中的所有區間 。

示例 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] 可被視為重疊區間。

提示:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104

要點:1.排序,sort(intervals.begin(), intervals.end(), [](auto& a, auto& b){return a[0] < b[0];});使用lamda函數,此種排序方式謹記
2.如果前一個區間末尾>=后一個區間開始則將前一個區間末尾值改為前一個區間末尾值和后一個區間末尾值中的較大值;

class Solution {
public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> result;  // 一個結果數組存儲輸出// 排序,使用lamda函數,此種排序方式謹記sort(intervals.begin(), intervals.end(), [](auto& a, auto& b){return a[0] < b[0];});for(int i = 0; i < intervals.size(); i++){// 如果前一個區間末尾>=后一個區間開始則將前一個區間末尾值改為前一個區間末尾值和后一個區間末尾值中的較大值if(!result.empty() && result[result.size()-1][1] >= intervals[i][0]){result[result.size()-1][1] = max(result[result.size()-1][1], intervals[i][1]);}else{result.push_back(intervals[i]);}}return result;}
};

擴展:

#include <vector>
#include <iostream>
#include <unordered_map>
#include <algorithm>using namespace std;struct Period {int s; // 開始時間int e; // 結束時間
};class ActivityManagerBase {
public:virtual vector<Period> getModBusyPeriods(const string& mod) = 0;virtual bool addBusyPeriods(const string& mod, const Period& prd) = 0;
};class ActivityManager : public ActivityManagerBase{
private:unordered_map<string, vector<Period>> modPeriods;// 輔助函數,用于合并重疊的時段vector<Period> mergePeriods(vector<Period>& periods) {vector<Period> merged;for (const auto& period : periods) {if (!merged.empty() && merged.back().e >= period.s) {merged.back().e = max(merged.back().e, period.e);} else {merged.push_back(period);}}return merged;}
public:vector<Period> getModBusyPeriods(const string& mod) override{if(modPeriods.count(mod) == 0){return {};}return mergePeriods(modPeriods[mod]);}bool addBusyPeriods(const string& mod, const Period& prd) override{modPeriods[mod].push_back(prd);sort(modPeriods[mod].begin(), modPeriods[mod].end(),[](auto& a, auto& b){return a.s < b.s;});return true;}
};int main(){// 在C++中,抽象類是包含至少一個純虛函數的類,它不能被實例化。// 在這個例子中,ActivityManagerBase 是一個抽象類,// 因為它有兩個純虛函數:getModBusyPeriods 和 addBusyPeriods。// 應該創建一個派生類(如 ActivityManager),// 并在派生類中實現所有的純虛函數。然后,你可以創建派生類的對象。ActivityManager AM;vector<string> mods = {"m1", "m2", "m1", "m2"};vector<Period> prds = {{2,6}, {8,10}, {1,3}, {15,18}};for(int i = 0; i < mods.size(); i++){AM.addBusyPeriods(mods[i], prds[i]);}vector<Period> m1_periods = AM.getModBusyPeriods("m1");for(const auto& period : m1_periods){cout << '{' << period.s << ',' << period.e << '}';}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711683.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++的繼承和多態

繼承和多態 繼承繼承的權限繼承的子父類訪問派生類的默認成員函數菱形繼承&#xff08;C獨有&#xff09;【了解】虛擬繼承什么是菱形繼承&#xff1f;菱形繼承的問題是什么&#xff1f;什么是菱形虛擬繼承&#xff1f;如何解決數據冗余和二義性的繼承和組合的區別&#xff1f;…

揭秘Android Tombstone:崩潰位置的秘密研究-Crash Location

由于一些工作原因&#xff0c;最近對Android系統發生crash的Tombstone展開了一定的研究。 這里我談一下關于對于Android Libstagefright 整數溢出漏洞的crash Tombstone的研究。看一下在包含整數溢出功能的MP4文件從PC傳輸進Android的時候造成的Tombstone0_0。 1、研究頭部信…

雙通道 40V 160mΩ車規級高側電源開關帶診斷功能反向電池保護功能

概述 PC8916是雙通道、高功率具有集成NMOS功率FET的開關&#xff0c;以及電荷泵。該設備集成了高級 保護功能&#xff0c;例如負載電流限制&#xff0c;通過功率限制進行過載主動管理帶可配置閉鎖的超溫停機。全面診斷和高精度電流感應這些功能實現了對負載的智能控制。有源漏…

[C++] 統計程序耗時

一、簡介 使用clock()函數記錄程序開始、結束時間戳。然后將開始結束時間戳差除以CLOCKS_PER_SEC得到程序的耗用的時間&#xff08;秒數&#xff09;。 二、代碼示例 #include <iostream> #include <time.h> #include <math.h> int main(int, char **) {clo…

JetPack 5.1編譯mish_cuda

1.查看jetpack版本:sudo jtop 自帶的就有cuda11.4和cudnn8.X以及python3.8,我的cudnn就沒有是后期自己安裝的 2.安裝torch PyTorch for Jetson - Announcements - NVIDIA Developer Forums 選擇對應的cuda版本和torch版本,我下載的是:torch-2.1.0a0+41361538.nv23.06-cp…

ETL數據倉庫的使用方式

一、ETL的過程 在 ETL 過程中&#xff0c;數據從源系統中抽取&#xff08;Extract&#xff09;&#xff0c;經過各種轉換&#xff08;Transform&#xff09;操作&#xff0c;最后加載&#xff08;Load&#xff09;到目標數據倉庫中。以下是 ETL 數倉流程的基本步驟&#xff1a…

2024中國5G隨身WiFi十大品牌排行榜,20245G隨身口碑排行榜,5G隨身WiFi2024最新款!5G隨身WiFi推薦測評

【中國品牌網中國3C質量評測中心權威榜單聯合發布】 第一名&#xff1a;格行5G隨身WiFi&#xff1a; 優點&#xff1a;隨身WiFi行業的頭部和領跑品牌&#xff0c;15年專業物聯網行業經驗&#xff0c;格行在技術研發、產品創新和客戶服務方面具有很高的口碑&#xff0c;被業內…

通過一篇文章讓你了解數據結構和算法的重要性

通過一篇文章讓你了解數據結構和算法的重要性 前言一、 什么是數據結構&#xff1f;二、什么是算法&#xff1f;三、數據結構和算法的重要性在校園招聘的筆試中&#xff1a;在校園招聘的面試中&#xff1a;在未來的工作中&#xff1a; 四、如何學好數據結構和算法4.1 死磕代碼&…

基于React全棧Sora AI視頻案例展示項目

花了一天時間基于React Next全棧開發的Sora AI 演示項目 Preview: https://sora.langchat.cn/ Github&#xff1a;https://github.com/tycoding/lang-sora 歡迎大家star、fork呀&#xff01; 這是一套完整的React & Next.js項目&#xff0c;包含前后端交互、路由、數據庫…

crc16計算

crc16計算&#xff0c;以生成式G(x)x16x15x21,為例 1、函數如下&#xff1a; //crc&#xff1a;G(x) x16x15x21 #define POLY 0x8005 //對應的生成式的多項式&#xff0c;可以查&#xff08;在在線計算crc工具下查&#xff09; unsigned short crc16_2(unsigned char *da…

CBAM注意力機制詳解(附pytorch復現)

簡介 論文原址&#xff1a;1807.06521.pdf (arxiv.org) CBAM&#xff08;Convolutional Block Attention Module&#xff09;是一種卷積神經網絡模塊&#xff0c;旨在通過引入注意力機制來提升網絡的表示能力。CBAM包含兩個順序子模塊&#xff1a;通道注意力模塊和空間注意力…

算法項目的合作流程

算法項目的合作流程通常包括以下幾個關鍵步驟&#xff0c;以上是算法項目合作的基本流程&#xff0c;具體項目可能會根據實際情況進行調整和補充。在整個項目過程中&#xff0c;良好的溝通、協作和團隊合作至關重要&#xff0c;能夠確保項目按時高質量地完成。北京木奇移動技術…

回歸啦!!!

消失的日子在實習&#xff0c;今天最后一天了來看看自己的學習日志&#xff0c;有沒有可以和小伙伴交流的部分吧&#xff01; 目錄 一、產品one ①簡介 ②底層原理 ③知識點一 作用一&#xff1a;日志采集 作用二&#xff1a;實時監測 作用三&#xff1a;規則匹配 作用…

Redis沖沖沖——事務支持,AOF和RDB持久化

目錄 引出Redis事務支持&#xff0c;AOF和RDB持久化1、Redis的事務支持2、Redis的持久化 Redis沖沖沖——緩存三兄弟&#xff1a;緩存擊穿、穿透、雪崩緩存擊穿緩存穿透緩存雪崩 總結 引出 Redis沖沖沖——事務支持&#xff0c;AOF和RDB持久化 Redis事務支持&#xff0c;AOF和…

codeforces 1868A

題目鏈接 思路 當 m 1 m1 m1時 發現是 M M M是一條 0 0 0的縱列&#xff0c;最后結果是 0 0 0 其余構造方法大體為&#xff1a;每行把上一行第一位元素移到隊尾 當 n < m ? 1 n<m-1 n<m?1時 我們可以如下構造 0,1,2,3,4…m-1 1,2,3,4…m-1,0 2,3,4…m-1,0,1…

【內部消息】24上半年軟考可能支持平板、PC和手機等多平臺報名

根據內部消息&#xff0c;軟考網上報名系統正在改革&#xff0c;之前只能通過PC端報名的&#xff0c;下次報名可能支持平板、手機等多終端進行網上報名了。現在官方并沒有確切消息發出&#xff0c;這次變動可能發生在2024上半年&#xff0c;也有可能得到下半年才能實行。以下是…

一文讀懂MES之工藝路線

什么是工藝路線 工藝路線&#xff0c;又被稱為生產工藝流程或生產流程路線&#xff0c;是指在進行產品或零件的生產過程中&#xff0c;按照一定的生產順序排列的一系列的工藝過程。簡單來說就是如何從原材料或者半成品零件&#xff0c;一步一步加工和制作&#xff0c;最終制作…

LeetCode_Java_動態規劃系列(2)(題目+思路+代碼)

131.分割回文串 給你一個字符串 s&#xff0c;請你將 s 分割成一些子串&#xff0c;使每個子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正著讀和反著讀都一樣的字符串。 示例 1&#xff1a; 輸入&#xff1a;s "aab" 輸出&#xff1a;[["a&qu…

InnoDB索引與優化篇(3)-事務隔離級別與InnoDB的應用

MySQL是一種常用的關系型數據庫管理系統&#xff0c;而事務是數據庫中常用的一種機制。在MySQL中&#xff0c;事務的隔離級別以及使用InnoDB引擎進行事務處理是非常重要的。在本博客中&#xff0c;我們將探討MySQL數據庫事務隔離級別和InnoDB的應用。 事務是一組數據庫操作的集…

立即報名Atlassian Team’24,與龍智一同踏上前往數字服務的創新之路

拉斯維加斯&#xff0c;4月30日至5月2日—— Atlassian Team’24盛大舉行&#xff01;現已正式啟動報名&#xff0c;誠邀您的參與&#xff01;與龍智一同走進這場創新與協作的盛會&#xff0c;您將有機會親身感受100余場精彩紛呈的活動&#xff0c;深入探索Atlassian平臺如何助…