-1
votes

Compte tenu d'un tableau d'INTS, retournez true si la séquence de nombres 1, 2, 3 apparaît dans la matrice quelque part

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 xxx

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


3 commentaires

Pensez à utiliser une seule boucle avec condition d'extrémité i . Dans la boucle, vérifiez les valeurs de nums [i] , nums [i + 1] et nums [i + 2] .


Cela renvoie littéralement true pour chaque tableau, vous ne faites rien avec résultat . 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; }


3 Réponses :


1
votes

Il y a beaucoup de choses mal avec votre code actuel.

  • vous retournerez vrai pour chaque cas.
  • Vous créez une variable résultat et ne rien faire avec elle.
  • Vous créez trois boucles lorsque vous pouvez utiliser un seul.
  • Vous ne vérifiez jamais vraiment si les valeurs sont à côté de l'autre.

    pour le premier problème, nous allons renvoyer vrai seul lorsque le 1, 2, 3 sont à côté de l'autre. et retourne faux; pour tous les autres cas. Ceci est fait en utilisant retour false; après la boucle.

    pour le problème suivant, résultat n'est pas nécessaire, vous n'avez pas réellement besoin de compter Tout, alors supprimez ceci.

    Pour le troisième numéro, combinez toutes les boucles en une seule boucle. Cependant, nous devrons boucler à la condition de nums.length-2 au lieu de la longueur car nous comparerons 3 valeurs simultanément, et nous ne voulons pas Pour obtenir un arrayoutofboundsException .

    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.

    ceci ressemblerait à si (nums [i] == 1 && nums [i + 1] == 2 && nums [i + 2] == 3) . Si cette condition est true , nous allons retourner vrai immédiatement.

    Voici comment le code va regarder avec tous ces correctifs: < Pré> xxx

    Test Test:

    vrai

    faux

    Remarque: Supprimer statique à partir du arrayonetwothree (int [] nums) Si vous devez l'utiliser dans Non statique contexte, j'ai utilisé statique pour le tester à partir de mon principal .


0 commentaires

2
votes
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).

0 commentaires

0
votes

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;
    }


0 commentaires