1. 程式人生 > 其它 >go channel 緩衝區最大限制_Go併發程式設計模型:主動停止goroutine

go channel 緩衝區最大限制_Go併發程式設計模型:主動停止goroutine

技術標籤:演算法

給定 n 個區間 [li,ri],要求合併所有有交集的區間。
注意如果在端點處相交,也算有交集。

思想:貪心

分析:先按區間的左區間從小到大排序,每次判斷每個區間是否可以合併。 狀態轉移方程(right為右區間的最大值):

在這裡插入圖片描述

程式碼:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
struct node{
    int l;
    int r;
}q[N],a[N];
bool cmp(node a,node b){
    return a.l<b.l;
}
int main
(){ int n,i,ans=1; cin>>n; for(i=0;i<n;i++){ cin>>q[i].l; cin>>q[i].r; } sort(q,q+n,cmp); int right=q[0].r,left=q[0].l; for(i=1;i<n;i++){ if(q[i].l>right){ a[ans].l=left; a[ans].r=right; ans++
; left=q[i].l; right=q[i].r; } else{ right=max(right,q[i].r); } } a[ans].l=left; a[ans].r=right; cout<<ans<<endl;//合併後區間個數 //輸出合併後的區間 for(i=1;i<=ans;i++){ cout<<"["<<a[i].l<
<","<<a[i].r<<"]"<<endl; } }