Aller au contenu

Maps – avec solutions

Compter les mots

Implémentez la fonction WordCount suivante :

func WordCount(s string) map[string]int {
    // TODO: replace the following line by your actual implementation
    return map[string]int{"x": 1}
}

Cette fonction doit retourner une map avec le nombre d’occurence de chaque mot présent dans le texte s.

Testez votre solution avec la fonction wc.Test du package golang.org/x/tour/wc :

package main

import (
    "golang.org/x/tour/wc"
)

func WordCount(s string) map[string]int {
    // TODO: Implement
}

func main() {
    wc.Test(WordCount)
}
Solution
package main

import (
    "strings"

    "golang.org/x/tour/wc"
)

func WordCount(s string) map[string]int {
    result := make(map[string]int)
    for _, word := range strings.Fields(s) {
        result[word] += 1
    }
    return result
}

func main() {
    wc.Test(WordCount)
}

Problème de la somme de deux éléments

Étant donné un tableau d’entiers nums et un entier target, écrivez une fonction en Go qui retourne deux nombres x et y tels que x et y appartiennent à nums et x + y = target.

  • Vous pouvez supposer que le problème a exactement une solution
  • Vous ne pouvez pas utiliser le même élément deux fois.
  • Vous pouvez retourner les éléments dans n’importe quel ordre.
  • Votre algorithme doit avoir une complexité en temps de \(O(n)\).

Testez votre solution avec l’exemple suivant :

fmt.Print(twoSum([]int{2, 7, 11, 15}, 9))

Vous devriez obtenir [2, 7] (ou [7, 2]) car 2 + 7 = 9.

Solution
func twoSum(nums []int, target int) []int {
    numMap := make(map[int]bool)
    for _, num := range nums {
        complement := target - num
        if _, ok := numMap[complement]; ok {
            return []int{complement, num}
        }
        numMap[num] = true
    }
    return nil // or return an empty slice if no solution is found
}

Modifiez votre code pour qu’il retourne les indices des deux nombres dans le tableau nums au lieu des nombres eux-mêmes.

Solution
func twoSum(nums []int, target int) []int {
    numMap := make(map[int]int)
    for i, num := range nums {
        complement := target - num
        if j, ok := numMap[complement]; ok {
            return []int{j, i}
        }
        numMap[num] = i
    }
    return nil // or return an empty slice if no solution is found
}