একটি অ্যারে এবং একটি ২D ম্যাট্রিক্স দেওয়া থাকলে, ম্যাট্রিক্সের প্রতিটি সারিতে অ্যারের কতটি উপাদান আছে তা গণনা করতে হবে।
উদাহরণ
অ্যারে: [2, 4, 6]
ম্যাট্রিক্স:
2 4 6 3 4 6 6 2 1
আউটপুট:
- সারি ১: ৩টি (2, 4, 6)
- সারি ২: ২টি (4, 6)
- সারি ৩: ২টি (6, 2)
অ্যালগরিদম
- সাধারণ (O(row × col × arrSize)): তিনটি নেস্টেড লুপ।
- দক্ষ (O(row × col + row × arrSize)): প্রতিটি সারির উপাদানগুলো
unordered_set-এ রাখুন, তারপর অ্যারের উপাদান চেক করুন।
C++ কোড উদাহরণ (দুই পদ্ধতি)
#include <bits/stdc++.h>
using namespace std;
#define ROW 3
#define COL 3
// Naive approach
void countNaive(int matrix[ROW][COL], int arr[], int size) {
for (int i = 0; i < ROW; i++) {
int count = 0;
for (int k = 0; k < size; k++) {
for (int j = 0; j < COL; j++) {
if (arr[k] == matrix[i][j]) count++;
}
}
cout << "Row " << i+1 << ": " << count << endl;
}
}
// Efficient approach using unordered_set
void countEfficient(int matrix[ROW][COL], int arr[], int size) {
for (int i = 0; i < ROW; i++) {
unordered_set rowSet;
for (int j = 0; j < COL; j++)
rowSet.insert(matrix[i][j]);
int count = 0;
for (int k = 0; k < size; k++)
if (rowSet.count(arr[k])) count++;
cout << "Row " << i+1 << ": " << count << endl;
}
}
int main() {
int matrix[ROW][COL] = {{2,4,6}, {3,4,6}, {6,2,1}};
int arr[] = {2, 4, 6};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Naive:\n"; countNaive(matrix, arr, size);
cout << "\nEfficient:\n"; countEfficient(matrix, arr, size);
return 0;
}
ইনপুট
arr=[2,4,6], matrix=[[2,4,6],[3,4,6],[6,2,1]]
আউটপুট
Row 1: 3 Row 2: 2 Row 3: 2