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