Golang
Сестра Гоши Маша любит играть в прятки. Маша создала массив из n чисел от 1 до n. И какие-то из них поменяла на другие, также от 1 до n. Напишите функцию FindMissingValues(nums []int) []int, которая принимает данный массив и возвращает массив, содержащий числа, которые пропали, в порядке возрастания.
Примечания
Например, FindMissingValues([4, 3, 2, 7, 8, 2, 3, 1]) должна возвращать [5 6], FindMissingValues([4, 4, 4, 4]) — [1 2 3], а FindMissingValues([1, 1, 1]) — [2 3].
package main
import (
"fmt"
"sort"
)
func FindMissingValues(nums []int) []int {
n := len(nums)
missingValues := make([]int, 0)
expectedValues := make([]int, n)
for i := 0; i < n; i++ {
expectedValues[i] = i + 1
}
sort.Ints(nums)
sort.Ints(expectedValues)
for i := 0; i < n; i++ {
check := false
for j := 0; j < n; j++ {
if nums[i] == expectedValues[i] {
check = true
}
}
if !check {
missingValues = append(missingValues, expectedValues[i])
}
}
fmt.Println(nums)
return missingValues
}
func main() {
fmt.Println(FindMissingValues([]int{4, 3, 2, 7, 8, 2, 3, 1}))
}
Есть код который выводит [3 4 5 6] вместо [5 6] при первом примере.
Его нужно доработать принципом отсеивания из нового массива лишних цифр (тех которые есть во входном) и добавить их в новый массив, а его уже выводить.
Буду очень благодарен, в синтаксисе Golang трудно разобраться после питона)
Ответы
package main
import (
"fmt"
"sort"
)
func FindMissingValues(nums []int) []int {
n := len(nums)
missingValues := make([]int, 0)
expectedValues := make([]int, n)
for i := 0; i < n; i++ {
expectedValues[i] = i + 1
}
sort.Ints(nums)
sort.Ints(expectedValues)
i, j := 0, 0
for i < n && j < n {
if nums[i] == expectedValues[j] {
i++
j++
} else if nums[i] < expectedValues[j] {
i++
} else {
missingValues = append(missingValues, expectedValues[j])
j++
}
}
for j < n {
missingValues = append(missingValues, expectedValues[j])
j++
}
return missingValues
}
func main() {
fmt.Println(FindMissingValues([]int{4, 3, 2, 7, 8, 2, 3, 1}))
}
Необходимо заменить функцию FindMissingValues в исходном коде на предложенный выше код. Он исправит ошибку и доработает логику таким образом, чтобы выводилось [5 6] вместо [3 4 5 6].