Titre description
Étant donné un tableau entier nums et une cible de valeur cible, et vous demander d'identifier la valeur cible des deux entiers dans le tableau, et revenir à leur indice de tableau. Vous pouvez supposer que chaque entrée correspond à une seule réponse. Cependant, vous ne pouvez pas réutiliser le même élément de tableau.
Le titre provient de l'leetcode, cliquez pour entrer
Lire le titre
Exemple:
Compte tenu de nums = [2, 7, 11 , 15], cible = 9
parce que nums [0] + nums [1 ] = 2 + 7 = 9
est renvoyé [0, 1]
Solution A
D' abord avec un méthodes de résolution relativement faible, la double boucle pour traverser le réseau pour résoudre
ce deuxième cycle i + 1 à partir de la partie de début du cycle peut être réduite, comme dans le cycle précédent a été valeur vérifiée est inférieure à l'indice i est peu susceptible d'être position i obtenue en ajoutant la valeur de la cible.
public static int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
int numA = nums[i];
int numB = target - numA;
for (int j = i+1; j < nums.length; j++) {
if(numB == nums[j]){
return new int[]{i,j};
}
}
}
return null;
}
solution deux
nous devons non seulement déterminer ici s'il y a valeur dans ce tableau, vous devez également obtenir son emplacement, il est clair que la table de hachage est la meilleure façon de
public static int[] twoSum(int[] nums, int target) {
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for (int i = 0; i < nums.length; i++) {
int numA = nums[i];
int numB = target - numA;
if(map.containsKey(numB)){
return new int[]{map.get(numB),i};
}
map.put(numA,i);
}
return null;
}
Cela ne doit traverser à nouveau le tableau, l'efficacité est améliorée beaucoup.