हमें धनात्मक और ऋणात्मक पूर्णांकों की एक सरणी दी गई है। कार्य सरणी में मौजूद तत्वों के सकारात्मक और नकारात्मक सबसेट के बीच अधिकतम अंतर खोजना है। जैसा कि हमारे पास सकारात्मक और नकारात्मक संख्याओं के उपसमुच्चय हैं। तब अंतर (सकारात्मक का योग) - (नकारात्मक का योग) हमेशा अधिकतम होगा। ऐसा इसलिए है क्योंकि नकारात्मक घटाना उन्हें जोड़ देगा। सभी नकारात्मक को सकारात्मक में परिवर्तित करना और सरणी के सभी तत्वों को जोड़ना वांछित परिणाम देगा। आइए समझने के लिए उदाहरण देखें -
इनपुट - Arr[] ={ -2, 0, -3, 8, 10, 12, -4}
आउटपुट − दो सबसेट के बीच अधिकतम अंतर - 39
स्पष्टीकरण - धनात्मक पूर्णांक उपसमुच्चय {0, 8,10,12} का योग 30 होता है
ऋणात्मक पूर्णांक उपसमुच्चय { -2, -3, -4 } योग -9 है
अधिकतम अंतर 30 होगा - (-9) =39
इनपुट - Arr[] ={ -5, -15, -3, -2, 10, 20, 15 }
आउटपुट − दो सबसेट के बीच अधिकतम अंतर - 70
स्पष्टीकरण - धनात्मक पूर्णांक उपसमुच्चय { 10, 20, 15 } का योग 45 होता है
ऋणात्मक पूर्णांक उपसमुच्चय { -5, -15, -3, -2} योग -25
. हैअधिकतम अंतर 45 - (-25) =70
. होगानीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
हम एक पूर्णांक सरणी लेते हैं जिसमें धनात्मक और ऋणात्मक पूर्णांक होते हैं जैसे Arr[]
-
फ़ंक्शन सबसेट डिफरेंस (इंट एआर [], इंट एन) नकारात्मक और सकारात्मक पूर्णांक के दो सबसेट के बीच अधिकतम अंतर को खोजने के लिए है। इसमें दो तर्क होते हैं, एक स्वयं सरणी है और दूसरा इसका आकार n है।
-
सरणी के सभी तत्वों के योग को संग्रहीत करने के लिए एक चर राशि =0 लें।
-
बाएं से शुरू करते हुए, लूप के लिए (i=0;i
का उपयोग करके सरणी के प्रत्येक तत्व को पार करें -
यदि वर्तमान तत्व ऋणात्मक है (<0) -1 से गुणा करके इसे धनात्मक बनाएं।(arr[i]=arr[i]*-1 )
-
प्रत्येक तत्व को योग में जोड़ें।
-
जितना संभव हो सके अधिकतम सबसेट अंतर के रूप में योग लौटाएं।
उदाहरण
#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; } // Driver Code int main(){ int arr[] = { -1, 3, 5, 17, -32, 12 }; int n = 6; printf("Maximized difference between subsets : %d", subsetDifference(arr, n)); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Maximized difference between two subsets: 70