Je pense amélioration par rapport à O(n^2), mais il faut vérifier si cela est O(n) dans le pire des cas ou pas.
- Créer une variable
BestSoln=0;
et de parcourir le tableau pour le premier élément
et de stocker la meilleure solution pour le premier élément que j'ai.e bestSoln=k;
.
- Maintenant pour la 2e élément de considérer uniquement les éléments qui sont
k
distances
à partir du deuxième élément.
- Si
BestSol
n dans ce cas c'est mieux que la première itération, puis remplacer
c'est le contraire la laisser comme ça. Garder l'itération pour les autres éléments.
Il peut encore être amélioré si nous conservons max élément pour chaque subarray à partir de i
à la fin.
Cela peut être fait en O(n) en parcourant le tableau de la fin.
Si un élément particulier est plus que c'est local max puis il n'y a pas besoin de faire de l'évaluation de cet élément.
Entrée:
{9, 2, 3, 4, 5, 6, 7, 8, 18, 0}
créer des local max tableau pour ce tableau:
[18,18,18,18,18,18,18,0,0] O(n).
Maintenant, parcourir le tableau pour 9 ,ici, la meilleure solution sera i=0,j=8
.
Maintenant, pour le deuxième élément, ou après, nous n'avons pas besoin d'évaluer. et la meilleure solution est - i=0,j=8
.
Mais supposons que la matrice est d'Entrée:
{19, 2, 3, 4, 5, 6, 7, 8, 18, 0,4}
Local max array [18,18,18,18,18,18,18,0,0] puis dans la première itération nous n'avons pas besoin d'évaluer locales max est moins courant elem.
Maintenant, pour la deuxième itération meilleure solution est, i=1,j=10
. Maintenant pour les autres éléments que nous n'avez pas besoin de considérer l'évaluation comme ils ne peuvent pas donner la meilleure solution.
Laissez-moi savoir votre point de vue à votre cas d'utilisation à laquelle ma solution n'est pas applicable.