इस समस्या में, हमें [1,n] रेंज के n इंटीजर्स का एक ऐरे दिया गया है। हमारा कार्य एक ऐसा प्रोग्राम बनाना है जो |arr[0] – arr[1]| + |arr[1] – arr[2]| + … + |arr[n-2] – arr[n-1]| का अधिकतम मान ढूंढे।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट − array= {1, 2, 3}
आउटपुट − 3
व्याख्या −
max sum is |1-3|+|2-1| = 3
इस समस्या को हल करने के लिए, एक सरल दृष्टिकोण ऐरे से सभी क्रमचय बनाना है। और क्रमचय से सभी मानों का अधिकतम मान ढूंढना। एक अधिक प्रभावी विधि प्रत्येक n मान के लिए सभी अधिकतम मानों को सामान्यीकृत करना और फिर एक सामान्य सूत्र बनाना है।
तो,
(n = 1) के लिए अधिकतम योग = 0 (n = 2) के लिए अधिकतम योग = 1 (n = 3) के लिए अधिकतम योग = 3 (n = 4) के लिए अधिकतम योग = 7 (n = 5) के लिए अधिकतम योग = 11 तो, अधिकतम मान 0, 1, 3, 7, 11... है
सामान्य सूत्र है, ((n*n/2)-1)
उदाहरण
हमारे समाधान के कार्य को स्पष्ट करने वाला प्रोग्राम,
#include <iostream> using namespace std; int maxAbsVal(int n) { if (n == 1) return 0; return ((n*n/2) - 1); } int main() { int n = 4; cout<<"The maximum sum of absolute difference is "<<maxAbsVal(n); return 0; }आउटपुट
The maximum sum of absolute difference is 7