এই সমস্যায়, আমাদেরকে সাজানো অনন্য মানগুলির একটি অ্যারে দেওয়া হয়েছে। আমাদের কাজ হল অ্যারেতে এমন একটি উপাদান আছে কিনা তা খুঁজে বের করা যার মান অ্যারের যোগফলের অর্ধেক হয় .
সমস্যা বর্ণনা: অ্যারে অ্যারের জন্য, আমাদের অ্যারেতে x উপাদানটি খুঁজে বের করতে হবে যাতে অ্যারের সমস্ত উপাদানের যোগফল 2*X এর সমান হয়।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট: arr[] ={2, 4, 5, 6, 7}
আউটপুট: না
ব্যাখ্যা:
যোগফল =2 + 4 + 5 + 6 + 7 =24
কোনো উপাদান পাওয়া যায়নি৷
৷সমাধান পদ্ধতি:
সমস্যাটি সমাধান করার জন্য, আমাদের কেবল উপাদানগুলি খুঁজে বের করতে হবে যা অ্যারের সমস্ত উপাদানের যোগফলের অর্ধেক৷
অ্যালগরিদম:
ধাপ 1: অ্যারের সমস্ত উপাদানের যোগফল খুঁজুন।
ধাপ 2: যোগফলের মান বিজোড় হলে -1 ফেরত দিন।
ধাপ 3: যোগফলের মান জোড় হলে, x*2 =যোগফলের মতো x এলিমেন্ট খুঁজুন।
পদক্ষেপ 4: যদি উপাদান পাওয়া যায়, 1 রিটার্ন করুন।
ধাপ 5: যদি উপাদান না পাওয়া যায় -1 রিটার্ন।
উপাদান অনুসন্ধানের জন্য, আমরা বাইনারী অনুসন্ধান অ্যালগরিদম ব্যবহার করতে পারি এটি সাজানো হয়েছে।
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,
উদাহরণ
#include <iostream> using namespace std; int checkForElement(int array[], int n) { int arrSum = 0; for (int i = 0; i < n; i++) arrSum += array[i]; if (arrSum % 2) return -1; int start = 0; int end = n - 1; while (start <= end) { int mid = start + (end - start) / 2; if ( ( 2 * array[mid] ) == arrSum) return array[mid]; else if (( 2 * array[mid] ) > arrSum) end = mid - 1; else start = mid + 1; } return -1; } int main() { int array[] = { 4, 5, 6, 7, 9 }; int n = sizeof(array) / sizeof(array[0]); int x = checkForElement(array, n); if(x != -1) cout<<"Element found, value is "<<x; else cout<<"Element not found!"; return 0; }
আউটপুট −
Element not found!