विवरण
(2 * n - 1) पूर्णांकों की एक सरणी है। हम सरणी में बिल्कुल n तत्वों का चिह्न बदल सकते हैं। दूसरे शब्दों में, हम बिल्कुल n सरणी तत्वों का चयन कर सकते हैं, और उनमें से प्रत्येक को -1 से गुणा कर सकते हैं। सरणी का अधिकतम योग ज्ञात करें।
उदाहरण
यदि इनपुट ऐरे {-2, 100, -3} है तो हम -2 और -3 के अधिकतम बदलते संकेत प्राप्त कर सकते हैं। साइन एरे बदलने के बाद बन जाता है -
{2, 100, 3} और इस सरणी का अधिकतम योग 105 है।
एल्गोरिदम
- नकारात्मक संख्याओं की गणना करें
- संख्याओं के निरपेक्ष मान लेकर सरणी के योग की गणना करें।
- संख्याओं के निरपेक्ष मान लेकर सरणी की न्यूनतम संख्या ज्ञात करें
- जांचें कि क्या नहीं। ऋणात्मक संख्याओं का विषम है और n का मान तब भी योग से दो गुना m घटा रहा है और यह सरणी का अधिकतम योग होगा, योग का मान सरणी का अधिकतम योग होगा
- उपरोक्त चरणों को (2 * n - 1) बार दोहराएं
उदाहरण
आइए अब एक उदाहरण देखें -
#include <bits/stdc++.h> using namespace std; int getMaxSum(int *arr, int n) { int negtiveCnt = 0; int sum = 0; int m = INT_MAX; for (int i = 0; i < 2 * n - 1; ++i) { if (arr[i] < 0) { ++negtiveCnt; } sum = sum + abs(arr[i]); m = min(m, abs(arr[i])); } if (negtiveCnt % 2 && n % 2 == 0) { sum = sum - 2 * m; return sum; } return sum; } int main() { int arr[] = {-2, 100, -3}; int n = 2; cout << "Maximum sum = " << getMaxSum(arr, n) << endl; return 0; }
आउटपुट
Maximum sum = 105