ধরুন আমাদের একটি ম্যাট্রিক্স mat আছে যেখানে প্রতিটি সারি নন-ডিক্রিজিং ক্রমে সাজানো। আমাদের সব সারিতে সাধারণ সবচেয়ে ছোট উপাদানটি খুঁজে বের করতে হবে। যদি কোনো সাধারণ উপাদান না থাকে, তবে -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
- i = 0 থেকে n-1 পর্যন্ত লুপ চালান
- j = 0 থেকে x-1 পর্যন্ত লুপ চালান
- যদি m[mat[i, j]] + 1 = i + 1 হয়, তবে m[mat[i, j]] ১ বাড়ান
- j = 0 থেকে x-1 পর্যন্ত লুপ চালান
- প্রতিটি কী-মান জোড়ার জন্য
- যদি মান n হয়, তবে কীটি রিটার্ন করুন
- -1 রিটার্ন করুন
উদাহরণ (C++)
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝতে -
#include <bits/stdc++.h> using namespace std; class Solution { public: int smallestCommonElement(vector<vector<int>>& mat) { map <int, int> m; int n = mat.size(); int x = n ? mat[0].size() : 0; for(int i = 0; i < n; i++){ for(int j = 0; j < x; j++){ if(m[mat[i][j]] + 1 == i + 1){ m[mat[i][j]]++; } } } map <int, int> :: iterator it = m.begin(); while(it != m.end()){ if(it->second == n){ return it->first; } it++; } return -1; } }; int main(){ vector<vector<int>> v = {{1,2,3,4,5},{2,4,5,8,10},{3,5,7,9,11},{1,3,5,7,9}}; Solution ob; cout << (ob.smallestCommonElement(v)); }ইনপুট
[[1,2,3,4,5],[2,4,5,8,10],[3,5,7,9,11],[1,3,5,7,9]]
আউটপুট
5