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

หมายเลขเฉพาะตัวแรกใน C++


สมมติว่าเรามีคิวของจำนวนเต็ม เราจำเป็นต้องดึงจำนวนเต็มเฉพาะตัวแรกในคิวนั้น เราต้องใช้คลาสที่ชื่อว่า FirstUnique:มันจะถูกเริ่มต้นโดยตัวเลขในคิว กำหนดหนึ่งฟังก์ชัน showFirstUnique() ซึ่งจะคืนค่าของจำนวนเต็มเฉพาะตัวแรกของคิวและคืนค่า -1 หากไม่มีจำนวนเต็มดังกล่าว อีกวิธีหนึ่งคือ add(value) ซึ่งจะแทรกค่าลงในคิว

ดังนั้นหากอินพุตเป็นแบบ

  • เริ่มต้นด้วย [2,3,4] จากนั้นเรียกใช้ฟังก์ชันดังต่อไปนี้ −

  • showFirstUnique()

  • เพิ่ม(5)

  • showFirstUnique()

  • เพิ่ม(2)

  • showFirstUnique()

  • เพิ่ม(3)

  • showFirstUnique(),

จากนั้นผลลัพธ์จะเป็น 2, 2, 3, -1 ตามลำดับ

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

  • กำหนดหนึ่งคิว q

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

  • ตัวเริ่มต้นจะใช้อาร์เรย์

    • สำหรับแต่ละองค์ประกอบ i เป็น nums

      • (เพิ่ม cnt[i] ขึ้น 1)

    • สำหรับแต่ละองค์ประกอบ i เป็น nums

      • ถ้า cnt[i] เหมือนกับ 1 แล้ว −

        • แทรก i ลงใน q

  • กำหนดฟังก์ชัน showFirstUnique()

  • ในขณะที่ (ไม่ใช่ q ว่างเปล่าและ cnt[องค์ประกอบแรกของ q]> 1) ทำ -

    • ลบองค์ประกอบออกจาก q

  • return (ถ้า q ว่างเปล่า ดังนั้น -1 มิฉะนั้นองค์ประกอบแรกของ q)

  • กำหนดฟังก์ชัน add() ซึ่งจะใช้ค่า

  • (เพิ่มค่า cnt[ค่า] ขึ้น 1)

  • ถ้า cnt[value] เหมือนกับ 1 แล้ว −

    • ใส่ค่าลงใน q

ตัวอย่าง

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

#include ใช้เนมสเปซ std;คลาส FirstUnique {สาธารณะ:คิว  q; แผนที่  cnt; FirstUnique(vector&nums) { สำหรับ (int i :nums) { cnt[i]++; } สำหรับ (int i :nums) { if (cnt[i] ==1) { q.push(i); } } } int showFirstUnique() { while (!q.empty() &&cnt[q.front()]> 1) q.pop(); ส่งคืน q.empty() ? -1 :q.front(); } เพิ่มเป็นโมฆะ (ค่า int) { cnt[value]++; ถ้า (cnt[value] ==1) q.push(value); }};main(){ vector v ={2,3,5}; FirstUnique ob(v); ศาล <<(ob.showFirstUnique()) < 

อินพุต

<ก่อน>{2,3,5}ob.showFirstUnique();ob.add(5);ob.showFirstUnique();ob.add(2);ob.showFirstUnique();ob.add(3);ob .showFirstUnique();

ผลลัพธ์

223-1