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

ค้นหาองค์ประกอบทั่วไปที่เล็กที่สุดในทุกแถวใน C++


สมมติว่าเรามีเมทริกซ์แมทที่ทุกแถวเรียงตามลำดับที่ไม่ลดลง เราต้องหาองค์ประกอบทั่วไปที่เล็กที่สุดในแถวทั้งหมด หากไม่มีองค์ประกอบร่วม ให้คืนค่า -1 ดังนั้นหากเมทริกซ์เป็นเหมือน −

1 2 3 4 5
2 4 5 8 10
3 5 7 9 11
1 3 5 7 9

ผลลัพธ์จะเป็น 5

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

  • กำหนดแผนที่ m, n :=จำนวนแถวของเมทริกซ์

  • ถ้า n ไม่ใช่ 0 แล้ว x =ขนาดคอลัมน์ มิฉะนั้น 0

  • สำหรับฉันอยู่ในช่วง 0 ถึง n – 1

    • สำหรับ j ในช่วง 0 ถึง x – 1

      • ถ้า m[mat[i, j]] + 1 =i + 1 ให้เพิ่ม m[mat[i, j]] ขึ้น 1

  • สำหรับแต่ละคู่คีย์-ค่า i

    • ถ้าค่าของ i คือ n ให้คืนค่าคีย์ของ i

  • กลับ -1

ตัวอย่าง (C++)

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

#include ใช้เนมสเปซ std;class Solution {public:int smallestCommonElement(vector>&mat) { map  m; int n =mat.size(); int x =n? mat[0].size() :0; for(int i =0; i  ::iterator it =m.begin(); ในขณะที่(it !=m.end()){ if(it->second ==n){ return it->first; } มัน++; } กลับ -1; }};main(){ เวกเตอร์<เวกเตอร์> v ={{1,2,3,4,5},{2,4,5,8,10},{3,5,7,9, 11},{1,3,5,7,9}}; โซลูชัน ob; ศาล <<(ob.smallestCommonElement(v));}

อินพุต

<ก่อน>[[1,2,3,4,5],[2,4,5,8,10],[3,5,7,9,11],[1,3,5,7,9 ]]

ผลลัพธ์

5