একটি পজিটিভ ও নেগেটিভ ইন্টিজার অ্যারে দেওয়া আছে। টাস্ক হলো অ্যারেতে উপস্থিত পজিটিভ ও নেগেটিভ সাবসেটের এলিমেন্টগুলোর মধ্যে সর্বোচ্চ পার্থক্য বের করা। যেহেতু পজিটিভ ও নেগেটিভ সংখ্যার সাবসেট আলাদা, তাই পার্থক্য (পজিটিভগুলোর যোগফল) - (নেগেটিভগুলোর যোগফল) সর্বোচ্চ হবে। কারণ নেগেটিভ বিয়োগ করলে সেটি যোগ হয়ে যায়। সব নেগেটিভকে পজিটিভে কনভার্ট করে সব এলিমেন্ট যোগ করলেই ফলাফল পাওয়া যাবে।
উদাহরণ ১
ইনপুট: Arr[] = {-2, 0, -3, 8, 10, 12, -4}
আউটপুট: সর্বোচ্চ পার্থক্য - ৩৯
ব্যাখ্যা: পজিটিভ সাবসেট {0, 8, 10, 12} যোগফল = ৩০
নেগেটিভ সাবসেট {-2, -3, -4} যোগফল = -৯
সর্বোচ্চ পার্থক্য = ৩০ - (-৯) = ৩৯
উদাহরণ ২
ইনপুট: Arr[] = {-5, -15, -3, -2, 10, 20, 15}
আউটপুট: সর্বোচ্চ পার্থক্য - ৭০
ব্যাখ্যা: পজিটিভ সাবসেট {10, 20, 15} যোগফল = ৪৫
নেগেটিভ সাবসেট {-5, -15, -3, -2} যোগফল = -২৫
সর্বোচ্চ পার্থক্য = ৪৫ - (-২৫) = ৭০
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- পজিটিভ ও নেগেটিভ ইন্টিজার অ্যারে
Arr[]নেওয়া হয়। subsetDifference(int arr[], int n)ফাংশন দুটি সাবসেটের মধ্যে সর্বোচ্চ পার্থক্য বের করে। এটি অ্যারে ও এর সাইজ n আর্গুমেন্ট হিসেবে নেয়।sum=0ভেরিয়েবল সব এলিমেন্টের যোগফল স্টোর করতে।- বাম থেকে ডান ট্রাভার্স:
for(i=0; i। - যদি করেন্ট এলিমেন্ট নেগেটিভ হয় (<0), তবে -1 দিয়ে গুন করে পজিটিভ করা হয়।
- প্রতিটি এলিমেন্ট sum-এ যোগ করা হয়।
- sum রিটার্ন করা হয় যা সর্বোচ্চ সাবসেট পার্থক্য।
উদাহরণ কোড
#include <stdio.h>
int subsetDifference(int arr[], int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
if (arr[i] < 0)
arr[i] = arr[i] * -1;
sum += arr[i];
}
return sum;
}
// ড্রাইভার কোড
int main() {
int arr[] = {-1, 3, 5, 17, -32, 12};
int n = 6;
printf("সাবসেটগুলোর মধ্যে সর্বোচ্চ পার্থক্য: %d", subsetDifference(arr, n));
return 0;
}
আউটপুট
সাবসেটগুলোর মধ্যে সর্বোচ্চ পার্থক্য: 70