Trouvez le nombre d'occurrences de tableau plus de la moitié de la longueur du tableau (implémentation Java)

Le nombre de fois (de mise en œuvre Java) Plus de la moitié du tableau apparaissent

Titre Description
tableau Le nombre de fois qu'un numéro apparaît plus de la moitié de la longueur du tableau, trouver ce numéro. Par exemple, une longueur du tableau d'entrée 9 {} 1,2,3,2,2,2,5,4,2. Étant donné que le numéro 2 apparaît cinq fois, plus de la moitié de la longueur du tableau dans le tableau, la sortie 2. S'il y a 0 sortie.

idées de résolution de problèmes

Il y a un certain nombre d'apparition de array plus de la moitié, ce qui signifie que le nombre de fois où il apparaît apparence que tous les autres numéros et plus. Ainsi , nous pouvons économiser deux valeurs dans le temps à travers le réseau, on est le nombre actuel, un certain nombre de fois que le numéro est indiqué. Et actuellement stocké sous le même numéro si le tableau, les temps ++ ou Times-. Si les temps == 0, le numéro suivant est enregistré, et le temps mis à 1. le nombre de tous sera en mesure parce qu'il ya un plus grand nombre de la moitié pour faire en sorte que ce soit la dernière fois que le nombre de fois est réglé sur le numéro 1.
Il convient de noter que les résultats obtenus de cette manière, ne garantit pas l'existence de ces chiffres, tout besoin de déterminer si les conclusions de cette condition est satisfaite, sinon il ne montre existe pas. (Exemple: [1,1,1,2,2,2,3], le résultat final est de trois, mais le nombre ne dépasse pas 3 apparaît la moitié)

code mise en œuvre

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        int length = array.length;
        int result = array[0];
        int times = 1;
        for(int i = 1; i < length; i++) {
            if(times == 0) {
                result = array[i+1];
                times = 1;
            }
            else if(array[i] == result) {
                times++;
            }
            else if(array[i] != result) {
                times--;
            }
        }
        times = 0;
        for(int i = 0; i < length; i++) {
            if(array[i] == result) {
                times++;
            }
        }
        if(times > length/2) {
            return result;
        }
        else 
            return 0;
    }
}

Publié 254 articles originaux · louange gagné 23 · vues + 50000

Je suppose que tu aimes

Origine blog.csdn.net/qq_30242987/article/details/104759409
conseillé
Classement