essentiellement, j'essaie de revenir vrai, si 1, 2, 3 dans cet ordre spécifique se trouvent dans la matrice, je ne peux pas savoir comment faire cela.
ive déjà essayé d'en utiliser des boucles et si des déclarations, mais je ne sais pas si cela est le meilleur moyen de le faire p> Il ne renvoie que si 1s 2s et 3s sont dans la matrice, je veux que cela ne renvoie que si 1,2,3 sont dans leur ordre spécifique Entrez la description de l'image ici p> p>
3 Réponses :
Il y a beaucoup de choses mal avec votre code actuel.
vrai code> pour chaque cas. li>
- Vous créez une variable
résultat code> et ne rien faire avec elle. Li>
- Vous créez trois boucles lorsque vous pouvez utiliser un seul. Li>
- Vous ne vérifiez jamais vraiment si les valeurs sont à côté de l'autre. Li>
ul>
pour le premier problème, nous allons renvoyer vrai code> seul em> lorsque le 1, 2, 3 code> sont à côté de l'autre. et retourne faux; code> pour tous les autres cas. Ceci est fait en utilisant retour false; code> après la boucle. P> pour le problème suivant, résultat code> n'est pas nécessaire, vous n'avez pas réellement besoin de compter Tout, alors supprimez ceci. P> Pour le troisième numéro, combinez toutes les boucles en une seule boucle. Cependant, nous devrons boucler à la condition de nums.length-2 code> au lieu de la longueur code> car nous comparerons 3 valeurs simultanément, et nous ne voulons pas Pour obtenir un arrayoutofboundsException code>. p> Enfin, pour vérifier si toutes les valeurs sont à côté de l'autre, comparez simplement les valeurs à l'index de la matrice actuelle, le suivant et l'index deux valeurs sur 1, 2 et 3 respectivement. p>
ceci ressemblerait à si (nums [i] == 1 && nums [i + 1] == 2 && nums [i + 2] == 3) code>. Si cette condition est true code>, nous allons retourner vrai code> immédiatement. P> Voici comment le code va regarder avec tous ces correctifs: P> < Pré> xxx pré>
Test Test: strong> p>
vrai p>
faux p>
blockQuote>
Remarque: strong> Supprimer statique code> à partir du arrayonetwothree (int [] nums) code> Si vous devez l'utiliser dans Non statique CODE> contexte, j'ai utilisé statique code> pour le tester à partir de mon principal code>. p> p>
public boolean arrayOneTwoThree(int[] nums) { // variables declaration. boolean result = false; int counter = 0,index = 0; int arr[] = {1,2,3}; // base condition check. like array length should not be less than 3. if(nums.length < 3){ return result; } //for loop for iterating over array and finding desired pattern for(int i = 0; i < nums.length; i++){ //pattern found in array if(counter == 3){ result = true; return result; } if(nums[i] == arr[counter]){ index++; counter++; } else if(counter != 0){ i = index-1; counter = 0; } } if (counter == 3) { result = true; return result; } return result; } Complexity of this solution is O(n).
Veuillez essayer cette solution et vous pouvez résoudre tous vos cas de test
public static boolean find123(List<Integer> numbers) { boolean isOneExist=false; boolean isTwoExist=false; boolean isThreeExist=false; for(Integer n1:numbers) { if(n1==1) { isOneExist=true; } if(n1==2 && isOneExist) { isTwoExist=true; } if(n1==3 && isTwoExist) { isThreeExist=true; } } if(isOneExist && isTwoExist && isThreeExist) { return true; } return false; }
Pensez à utiliser une seule boucle avec condition d'extrémité
i. Dans la boucle, vérifiez les valeurs de
nums [i] code>,
nums [i + 1] code> et
nums [i + 2] code>.
Cela renvoie littéralement
true code> pour chaque tableau, vous ne faites rien avec
résultat code>. Veuillez poster le code réel que vous avez utilisé, ce n'est pas le même code.
Cela équivaut à
Boolean Boolean Arayonetwothree (int [] nums) {retourne vrai; } code>