C++程式:查詢需要移除的最小區間數以消除重疊
假設我們有一組區間;我們必須找到應移除的最小區間數,以使其餘區間不重疊。例如,如果區間是[[8,10],[3,5],[6,9]],則輸出為1,因為我們必須移除[6,9]才能使其他區間不重疊。
為了解決這個問題,我們將遵循以下步驟:
- n := 陣列大小
- 如果n為0,則返回0
- count := 1
- 根據區間的結束時間對陣列進行排序
- end := 第一個區間的結束日期
- 對於範圍1到n – 1中的i
- 如果arr[i]的開始時間 >= end,則
- end := arr[i]的結束時間
- 將count加1
- 如果arr[i]的開始時間 >= end,則
- 返回n – count
讓我們看看下面的實現,以便更好地理解:
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
static bool cmp(vector <int>& a, vector <int>& b){
return a[1] < b[1];
}
int eraseOverlapIntervals(vector<vector<int>>& arr) {
int n = arr.size();
if(!n)return 0;
int cnt = 1;
sort(arr.begin(), arr.end(), cmp);
int end = arr[0][1];
for(int i = 1; i < n; i++){
if(arr[i][0] >= end){
end = arr[i][1];
cnt++;
}
}
return n - cnt;
}
};
main(){
vector<vector<int>>
v = {{8,10},{3,5},{6,9}};
Solution ob;
cout << (ob.eraseOverlapIntervals(v));
}輸入
{{8,10},{3,5},{6,9}}輸出
1
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP