Предмет: Информатика, автор: ivanus585

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 трудно разобраться после питона)

Ответы

Автор ответа: salatblitz51
1

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].


ivanus585: Огромное вам спасибо.
Интересные вопросы
Предмет: Английский язык, автор: demon20092309
Предмет: Алгебра, автор: pandaissigma
Предмет: Английский язык, автор: Feidopokoli
Предмет: Физика, автор: qwerty0994086206
Предмет: Русский язык, автор: diana8870