Pourquoi trouver la différence entre les éléments adjacents du tableau pour trouver la différence maximale?

cs.stackexchange https://cs.stackexchange.com/questions/106363

Question

Je veux comprendre une méthode délicate pour trouver la différence maximale entre deux éléments tels que l'élément plus grand apparaît après le plus petit nombre. J'ai trouvé une solution facile en gardant une trace du tableau minimum, mais je n'obtiens pas la solution suivante qui trouve d'abord la différence entre les éléments adjacents du tableau et stockent toutes les différences dans un tableau auxiliaire diff [] de taille n-1. Les problèmes se transforment en trouvant la sous-réseau maximale de ce tableau de différence.

Voici un exemple de travail ainsi que mes commentaires montrant où je ne comprends particulièrement pas l'algorithme.

// C++ program to find Maximum difference 
// between two elements such that larger 
// element appears after the smaller number 
#include <bits/stdc++.h> 
using namespace std; 

/* The function assumes that there are 
at least two elements in array. The 
function returns a negative value if the 
array is sorted in decreasing order and 
returns 0 if elements are equal */
int maxDiff(int arr[], int n) 
{ 
    // Create a diff array of size n-1. 
    // The array will hold the difference 
    // of adjacent elements 
    int diff[n-1]; 
    for (int i=0; i < n-1; i++) 
        diff[i] = arr[i+1] - arr[i]; 

    // Now find the maximum sum 
    // subarray in diff array 
    int max_diff = diff[0]; 
    for (int i=1; i<n-1; i++) 
    { 
        if (diff[i-1] > 0) 
            diff[i] += diff[i-1]; // I especially don't get why we add differences
        if (max_diff < diff[i]) 
            max_diff = diff[i]; // and why we update the max_diff as the sum of differences
    } 
    return max_diff; 
} 

/* Driver program to test above function */
int main() 
{ 
int arr[] = {80, 2, 6, 3, 100}; 
int n = sizeof(arr) / sizeof(arr[0]); 

// Function calling 
cout << "Maximum difference is " << maxDiff(arr, n); 

return 0; 
} 

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top