আমাদের কাছে একটি অ্যারে A রয়েছে। A-র সব উপাদান m বার tekrar হয়, কিন্তু একটি উপাদান শুধু একবার থাকে। আমাদের সেই অনন্য উপাদানটি খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুট হয় A = [6, 2, 7, 2, 2, 6, 6], m = 3, তবে আউটপুট হবে 7।
সমাধান পদ্ধতি
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- INT_SIZE := একটি ইন্টিজার টাইপ ভেরিয়েবলের আকারের ৮ গুণ
- আকার INT_SIZE-এর একটি count সরণি সংজ্ঞায়িত করুন এবং ০ দিয়ে भरুন
- i := 0 থেকে आरंभ करें, जब i < INT_SIZE, अपडेट करें (i को 1 से बढ़ाएं), करें:
- j := 0 থেকে आरंभ करें, जब j < size, अपडेट करें (j को 1 से बढ़ाएं), करें:
- यदि (arr[j] AND 2^i) 0 के बराबर नहीं है, तो:
- count[i] := count[i] + 1
- res := 0
- यदि (arr[j] AND 2^i) 0 के बराबर नहीं है, तो:
- i := 0 থেকে आरंभ करें, जब i < INT_SIZE, अपडेट करें (i को 1 से बढ़ाएं), करें:
- res := res + ((count[i] mod m) * 2^i)
- res ফেরত দিন
উদাহরণ (C++)
বेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; int selectUnique(unsigned int arr[], int size, int m){ int INT_SIZE = 8 * sizeof(unsigned int); int count[INT_SIZE]; memset(count, 0, sizeof(count)); for(int i = 0; i < INT_SIZE; i++) for(int j = 0; j < size; j++) if((arr[j] & (1 << i)) != 0) count[i] += 1; unsigned res = 0; for(int i = 0; i < INT_SIZE; i++) res += (count[i] % m) * (1 << i); return res; } main(){ unsigned int arr[] = { 6, 2, 5, 2, 2, 6, 6 }; int size = sizeof(arr) / sizeof(arr[0]); int m = 3; cout << selectUnique(arr, size, m); }इनपुट
{ 6, 2, 5, 2, 2, 6, 6 }आउटपुट
5
- j := 0 থেকে आरंभ करें, जब j < size, अपडेट करें (j को 1 से बढ़ाएं), करें: