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

ค้นหาองค์ประกอบทั่วไปในทุกแถวของเมทริกซ์ที่จัดเรียงตามแถวที่กำหนดใน C++


สมมติว่าเรามีเมทริกซ์ที่จัดเรียงแต่ละแถว เราต้องเขียนฟังก์ชันที่จะหาองค์ประกอบทั่วไปในแต่ละแถว สมมติว่าเมทริกซ์อยู่ด้านล่าง -

ค้นหาองค์ประกอบทั่วไปในทุกแถวของเมทริกซ์ที่จัดเรียงตามแถวที่กำหนดใน C++

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

เพื่อแก้ปัญหานี้ เราจะใช้วิธีการแบบแฮช วิธีนี้สามารถใช้เมื่อไม่มีการเรียงลำดับแถว เราต้องทำตามขั้นตอนบางอย่างเพื่อทำสิ่งนี้ -

เราจะสร้างตารางแฮชหนึ่งตารางที่มีคีย์ทั้งหมดเป็นองค์ประกอบที่แตกต่างกันของ 2 1 ค่าทั้งหมดจะเป็น 0

วนซ้ำแต่ละองค์ประกอบในเมทริกซ์ หากมีตัวเลขในตารางแฮช ให้เพิ่มจำนวนขึ้น 1 ขั้น สุดท้ายตรวจสอบว่ามีค่าบางค่าที่นับเหมือนกับหมายเลขแถวของเมทริกซ์หรือไม่ ถ้าเป็นเช่นนั้น แสดงว่ามีอยู่ในแต่ละแถว (สมมติว่าค่าหนึ่งไม่ซ้ำกันในแถวเดียว)

ตัวอย่าง

#include<iostream>
#include<unordered_map>
#define M 4
#define N 5
using namespace std;
int getCommonElement(int matrix[M][N]) {
   unordered_map<int, int> count;
   int i, j;
   for (i = 0; i < M; i++) {
      count[matrix[i][0]]++;
      for (j = 1; j < N; j++) {
         if (matrix[i][j] != matrix[i][j - 1])
         count[matrix[i][j]]++;
      }
   }
   for (auto ele : count) {
      if (ele.second == M)
      return ele.first;
   }
   return -1;
}
int main() {
   int matrix[M][N] = {
      { 1, 2, 3, 4, 5 },
      { 2, 4, 5, 8, 10 },
      { 3, 5, 7, 9, 11 },
      { 1, 3, 5, 7, 9 },
   };
   int result = getCommonElement(matrix);
   if (result == -1)
      cout << "No common element has found";
   else
      cout << "Common element is " << result;
}

ผลลัพธ์

Common element is 5