Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมค้นหาจำนวนช่วงเวลาขั้นต่ำที่จะลบเพื่อลบคาบเกี่ยวกันใน C++


สมมติว่าเรามีชุดของช่วงเวลา เราต้องหาจำนวนช่วงขั้นต่ำที่ควรลบออกเพื่อให้ช่วงเวลาที่เหลือไม่ทับซ้อนกัน ดังนั้นหากช่วงเวลาคือ [[8,10],[3,5],[6,9]] ผลลัพธ์จะเป็น 1 เนื่องจากเราต้องลบ [6,9] เพื่อให้ส่วนอื่นไม่ทับซ้อนกัน .

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • n :=ขนาดของอาร์เรย์
  • ถ้า n เป็น 0 ให้คืนค่า 0
  • นับ :=1
  • จัดเรียงอาร์เรย์ตามเวลาสิ้นสุดของช่วงเวลา
  • สิ้นสุด :=วันที่สิ้นสุดของช่วงแรก
  • สำหรับ i ในช่วง 1 ถึง n – 1
    • ถ้าเวลาเริ่มต้นของ arr[i]>=สิ้นสุด แล้ว
      • สิ้นสุด :=เวลาสิ้นสุดของ arr[i]
      • เพิ่มจำนวนขึ้น 1
  • ผลตอบแทน 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