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
}