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

จำนวนที่บ่อยที่สุดในช่วงเวลาใน C ++


สมมติว่าเรามีรายการช่วงจำนวนเต็มโดยที่แต่ละองค์ประกอบมีช่วงเวลาเช่น [เริ่ม, สิ้นสุด] เราต้องหาจำนวนที่เกิดขึ้นบ่อยที่สุดเป็นระยะ หากเสมอกัน ให้คืนจำนวนที่น้อยที่สุด

ดังนั้น หากอินพุตเป็น [[2, 5],[4, 6],[7, 10],[8, 10]] ผลลัพธ์จะเป็น 4

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

  • กำหนดหนึ่งแผนที่ m

  • cnt :=0, val :=0

  • สำหรับแต่ละค่าใน x -

    • (เพิ่ม m[it[0]] ขึ้น 1)

    • ลด m[it[1] + 1] ลง 1

  • ล่าสุด :=0

  • สำหรับแต่ละคีย์ใน m

    • สุดท้าย :=สุดท้าย + ค่าของมัน

    • ถ้าสุดท้าย> cnt แล้ว:

      • cnt :=สุดท้าย

      • val :=มัน

  • ค่าส่งคืน

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include ใช้เนมสเปซ std;class Solution { สาธารณะ:int แก้ปัญหา (vector >&x) { แผนที่  m; int cnt =0; ค่า int =0; สำหรับ(อัตโนมัติ&มัน :x){ m[it[0]]++; ม[มัน[1] + 1]--; } int สุดท้าย =0; for(auto&it :m){ สุดท้าย +=it.second; if(last> cnt){ cnt =สุดท้าย; val =it.first; } } ค่าส่งคืน; }};main() { โซลูชัน ob; เวกเตอร์<เวกเตอร์> v ={{2, 5},{4, 6},{7, 10},{8, 10}}; ศาล < 

อินพุต -

<ก่อน>{{2, 5},{4, 6},{7, 10},{8, 10}}

ผลลัพธ์

4