สมมติว่าเรามีชุดของช่วงเวลา เราต้องหาจำนวนช่วงขั้นต่ำที่ควรลบออกเพื่อให้ช่วงเวลาที่เหลือไม่ทับซ้อนกัน ดังนั้นหากช่วงเวลาคือ [[8,10],[3,5],[6,9]] ผลลัพธ์จะเป็น 1 เนื่องจากเราต้องลบ [6,9] เพื่อให้ส่วนอื่นไม่ทับซ้อนกัน .
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- n :=ขนาดของอาร์เรย์
- ถ้า n เป็น 0 ให้คืนค่า 0
- นับ :=1
- จัดเรียงอาร์เรย์ตามเวลาสิ้นสุดของช่วงเวลา
- สิ้นสุด :=วันที่สิ้นสุดของช่วงแรก
- สำหรับ i ในช่วง 1 ถึง n – 1
- ถ้าเวลาเริ่มต้นของ arr[i]>=สิ้นสุด แล้ว
- สิ้นสุด :=เวลาสิ้นสุดของ arr[i]
- เพิ่มจำนวนขึ้น 1
- ถ้าเวลาเริ่มต้นของ arr[i]>=สิ้นสุด แล้ว
- ผลตอบแทน n – นับ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#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