Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Problema con gli array

  1. #1

    Problema con gli array

    Ciao a tutti
    Ho una domanda riguardo la gestione di particolari problemi con gli array, che mi viene in testa ogni volta che mi viene chiesto di gestire il numero di comparse dei valori di un array non ordinato. Mi spiego meglio con qualche semplice esempio:


    Metodo triple: il metodo restituisce true se almeno un elemento dell'array è presente 3 o più volte nell'array
    codice:
    /**conta quante volte compare un elemento x all'interno di un array*/
    private static int nAppar(int[]a, int x){
        int counter=0;
        for (int i=0; i<a.length; i++)
            if (a[i]==x)
                counter++;
        return counter;
    }//nAppar
    
    
    public static boolean triple(int[]a){
        for (int i=0; i<a.length; i++)
            if(nAppar(a,i)>=3)
                return true;
        return false;
    }//triple
    E' l'unico modo per gestire un esercizio del genere? Non è dispendioso un ciclo annidato?


    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Giammarco18 Visualizza il messaggio
    codice:
    public static boolean triple(int[]a){
        for (int i=0; i<a.length; i++)
            if(nAppar(a,i)>=3)
                return true;
        return false;
    }//triple
    Uhm no, qui dovresti passare a nAppar come secondo parametro (x) il valore di a[i] ... non solo i.

    Quote Originariamente inviata da Giammarco18 Visualizza il messaggio
    E' l'unico modo per gestire un esercizio del genere?
    Con solo for (cicli in generale) sì. Tra l'altro sarebbe un pochino ottimizzabile (la tua scansione annidata parte sempre dall'inizio ... non servirebbe; e il ciclo annidato potrebbe terminare appena trovate k occorrenze, dovrebbe essere parametrabile, ovviamente).

    Altrimenti si possono sfruttare le collezioni, in modo specifico una mappa (meglio "hashed", es. HashMap) con associazioni valore -> contatore. Se l'array è molto grande, supera certamente i for annidati.
    Ultima modifica di andbin; 04-02-2015 a 00:12
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.