[PYTHON] Utilisez des collections.

Utilisez collections.Counter

En Python, il n'y a pas de MultiSet (un ensemble qui autorise le même élément) par défaut, mais vous pouvez utiliser collections.Counter à la place. Ce n'est pas seulement un MultiSet, mais il a une méthode pratique pour compter, il peut donc être utilisé dans diverses situations.

Référence: https://docs.python.org/ja/3/library/collections.html#collections.Counter

Prenons LeetCode comme exemple.

169. Majority Element

Trouvez la valeur la plus fréquente de «nums».

Vous pouvez utiliser most_common comme ci-dessous.

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        return collections.Counter(nums).most_common(1)[0][0]

242. Valid Anagram

Demande si les deux chaînes «s» et «t» sont des anagrammes.

Être un anagramme signifie qu'il apparaît le même nombre de fois. Par conséquent, comparez simplement collections.Counter avec ==.

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return collections.Counter(s) == collections.Counter(t)

299. Bulls and Cows

Trouvez le nombre de correspondances dans la rubrique «position et nombre» et le nombre de correspondances dans le jeu de devinettes.

"Position et numéro" peuvent être extraits par zip et comparés. Pour le nombre qui correspond uniquement au nombre, recherchez le jeu de produits avec "&" et comptez le nombre ("valeurs").

class Solution:
    def getHint(self, secret: str, guess: str) -> str:
        co = collections.Counter
        a = sum(i == j for i, j in zip(secret, guess))
        b = sum((co(secret) & co(guess)).values()) - a
        return f"{a}A{b}B"

347. Top K Frequent Elements

Trouvez les K principaux éléments haute fréquence.

Dans l'état actuel des choses, utilisez most_common.

class Solution:
    def topKFrequent(self, nums: List[int], k: int) -> List[int]:
        return [i for i, _ in collections.Counter(nums).most_common(k)]

350. Intersection of Two Arrays II

Retrouvez la partie commune des deux listes dans la liste.

Les éléments peuvent être obtenus avec des «éléments».

class Solution:
    def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]:
        c = collections.Counter(nums1) & collections.Counter(nums2)
        return list(c.elements())

383. Ransom Note

Demande si chaque personnage de ransomNote est inclus dans le magazine. Chaque personnage du magazine ne peut être utilisé qu'une seule fois.

Vous pouvez calculer la différence définie avec " - ".

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        return not (collections.Counter(ransomNote) - collections.Counter(magazine))

387. First Unique Character in a String

Trouvez l'index du premier caractère unique.

Il ne renvoie que celui avec 1 apparence.

class Solution:
    def firstUniqChar(self, s: str) -> int:
        for k, v in collections.Counter(s).items():
            if v == 1:
                return s.index(k)
        return -1

Au fait, "136. Single Number" pour trouver le nombre dont un seul existe doit être accumulé par XOR.

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        res = 0
        for i in nums:
            res ^= i
        return res

389. Find the Difference

Ajoutez un caractère à la chaîne s et laissez la chaîne mélangée être t. Demandez le personnage ajouté.

Il peut être calculé comme un ensemble de différences.

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        return list((collections.Counter(t) - collections.Counter(s)).keys())[0]

532. K-diff Pairs in an Array

Trouvez le nombre de paires d'éléments pour lesquelles la différence est k.

collections.Counter peut utiliser ʻitems ()` comme un dictionnaire. Les éléments sont la valeur et le nombre.

class Solution:
    def findPairs(self, nums: List[int], k: int) -> int:
        c = collections.Counter(nums)
        return sum(k > 0 and n + k in c or k == 0 and f > 1 for n, f in c.items())

657. Robot Return to Origin

Découvrez si le point final du robot après le mouvement est l'origine.

collections.Counter peut utiliser get (key) comme un dictionnaire. Il revient à l'origine lorsque le nombre de mouvements à gauche et le nombre de mouvements à droite sont égaux et que le nombre de mouvements vers le bas et le nombre de mouvements vers le haut sont égaux. Vous pouvez utiliser str.count, mais collections.Counter est mieux.

class Solution:
    def judgeCircle(self, moves: str) -> bool:
        c = collections.Counter(moves)
        return c.get("L", 0) == c.get("R", 0) and c.get("D", 0) == c.get("U", 0)

819. Most Common Word

Trouvez les mots les plus fréquents qui ne sont pas inclus dans banni (majuscules et minuscules).

Vous pouvez utiliser «most_common» car c'est le mot le plus fréquent.

class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
        c = collections.Counter(re.findall(r"\w+", paragraph.lower()))
        return next(s for s, _ in c.most_common() if s not in banned)

893. Groups of Special-Equivalent Strings

Si des échanges pairs ou impairs sont échangés et correspondent, ils sont considérés comme faisant partie du même groupe. Trouvez le nombre de groupes.

Utilisez collections.Counter en changeant les cotes en majuscules. Vous pouvez également trouver le groupe en utilisant set (tuple (sorted (c.items ()))).

class Solution:
    def numSpecialEquivGroups(self, A: List[str]) -> int:
        cc = [collections.Counter(i[::2].upper() + i[1::2]) for i in A]
        return len(set(tuple(sorted(c.items())) for c in cc))

De côté

Je n'utilise pas more_itertools pour faire correspondre LeetCode, mais cela simplifie les choses.

Référence: Exemple de réponse LeetCode utilisant collections.Counter

Recommended Posts

Utilisez des collections.
collections.
Utilisez DeepLabCut
Utilisation: Django-MySQL
Utilisez Pygments.rb
Utilisez Numpy
Utilisez pandas-ply
Utilisez GitPython
Utiliser Miniconda
Utiliser le TSC invariant
Pourquoi utiliser Linux
[C] Utilisez qsort ()
Utilisons pytube
Utiliser l'API JIRA
Utilisez des références faibles
Utiliser django-debug-toolbar de manière non locale
Utiliser l'optimisation des combinaisons