समस्या विवरण
n तत्वों की सरणी से n/2 जोड़ियां बनाएं जिससे जोड़ियों के योग के वर्गों का योग न्यूनतम हो।
उदाहरण: arr = {5, 10, 7, 4}
जोड़ियां: (4, 10) और (5, 7)
योग: (14)² + (12)² = 196 + 144 = 340
एल्गोरिदम
- सरणी को क्रमबद्ध करें
- दो पॉइंटर्स: शुरुआत (start) और अंत (end)
- start और end के तत्वों की जोड़ी बनाएं, वर्ग जोड़ें
- start++, end-- दोहराएं
उदाहरण कोड
#include <iostream>
#include <algorithm>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
int getMinSquareSum(int* arr, int n) {
sort(arr, arr + n);
int minSum = 0;
int start = 0, end = n - 1;
while (start < end) {
int sum = arr[start] + arr[end];
sum *= sum;
minSum += sum;
++start;
--end;
}
return minSum;
}
int main() {
int arr[] = {5, 10, 7, 4};
cout << "Minimum square sum: " << getMinSquareSum(arr, SIZE(arr)) << "\n";
return 0;
}
आउटपुट
Minimum square sum: 340