মান করুন একটি টেবিলে Nটি কার্ড আছে, প্রতিটি কার্ডের দুপাশে ধনাত্মক পূর্ণসংখ্যা প্রিন্ট করা আছে (হয়তো ভিন্ন)। আমরা যেকোনো সংখ্যক কার্ড ফ্লিপ করতে পারি, এবং তারপর একটি কার্ড বেছে নিই। যদি বেছে নেওয়া কার্ডের পিছনের দিকের নম্বর X কোনো কার্ডের সামনের দিকে না থাকে, তবে X কে ভালো নাম্বার বলা হবে। আমাদের সবচেয়ে ছোট ভালো নাম্বার খুঁজে বের করতে হবে? কোনো ভালো নাম্বার না থাকলে 0 ফেরত দিন। এখানে fronts[i] এবং backs[i] কার্ড i-এর সামনে এবং পিছনের নম্বর নির্দেশ করে। একটি ফ্লিপ সামনে এবং পিছনের নম্বর বদলিয়ে দেয়।
যদি ইনপুট হয় fronts = [1,2,4,4,7] এবং backs = [1,3,4,1,3], তবে আউটপুট হবে ২। কারণ যদি দ্বিতীয় কার্ড ফ্লিপ করি, সামনের মান হবে [1,3,4,4,7] এবং পিছনের হবে [1,2,4,1,3]। আমরা দ্বিতীয় কার্ড বেছে নিই, যার পিছনে ২ আছে, এবং ২ কোনো কার্ডের সামনে নেই, তাই ২ একটি ভালো নাম্বার।
এটি সমাধান করার জন্য নিচের ধাপগুলি অনুসরণ করুন −
- একটি সেট
sসংজ্ঞায়িত করুন,n := fronts-এর আকার,ret := inf i = 0থেকেn - 1পর্যন্ত- যদি
fronts[i] == backs[i]হয়, তবেfronts[i]সেটে ইনসার্ট করুন
- যদি
i = 0থেকেn - 1পর্যন্ত- যদি
fronts[i]সেটে না থাকে, তবেret := min(ret, fronts[i])
- যদি
i = 0থেকেn - 1পর্যন্ত- যদি
backs[i]সেটে না থাকে, তবেret := min(ret, backs[i])
- যদি
ret = infহলে 0 ফেরত দিন, অন্যথায়ret
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int flipgame(vector<int>& fronts, vector<int>& backs) {
set <int> s;
int n = fronts.size();
int ret = INT_MAX;
for(int i = 0; i < n; i++){
if(fronts[i] == backs[i]) s.insert(fronts[i]);
}
for(int i = 0; i < n; i++ ){
if(s.count(fronts[i]) == 0) ret = min(ret, fronts[i]);
}
for(int i = 0; i < n; i++ ){
if(s.count(backs[i]) == 0) ret = min(ret, backs[i]);
}
return ret == INT_MAX ? 0 : ret;
}
};
main(){
vector<int> v1 = {1,2,4,4,7};
vector<int> v2 = {1,3,4,1,3};
Solution ob;
cout << (ob.flipgame(v1, v2));
}
ইনপুট
[1,2,4,4,7] [1,3,4,1,3]
আউটপুট
2