Étant donné un tableau trié d'entiers, je veux trouver le nombre de paires qui totalisent . Par exemple, étant donné , le nombre de paires somme à zéro est .
Soit le nombre d'éléments dans le tableau d'entrée. Si j'utilise la recherche binaire pour trouver l'inverse additif d'un élément du tableau, l'ordre est . Si je traverse tous les éléments de l'ensemble, alors l'ordre est .
Comment trouver un algorithme d'ordre ?
algorithms
Laura
la source
la source
Réponses:
LaisserUNE être le tableau d'entrée trié. Gardez deux pointeursl et r qui passent par les éléments UNE . Le pointeurl passera par la "partie gauche" de UNE , ce sont les entiers négatifs. Le pointeurr fait de même pour la "partie droite", les entiers positifs. Ci-dessous, je vais décrire une solution de pseudocode et supposer que0 ∉ A pour une simplicité mineure. Omettent également les vérifications pour les cas où il n'y a que des nombres entiers positifs ou négatifs dansUNE .
Il est évident que l'algorithme prendO ( N) temps.
la source
Selon moi, l'approche la plus simple semble être d'utiliser une table de hachage, H = {a [0] = true, .., a [n-1] = true}. Cette table de hachage peut être construite en temps O (n). Une fois la table de hachage construite, parcourez A [0, .., n-1] et vérifiez si H [-1 * a [i]] existe. Si c'est le cas, incrémentez un compteur de 1 et retournez le résultat final. C'est clairement O (n).
la source
Notez que nous pouvons rechercher une valeur dans un ensemble Python en temps constant.
la source