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

Ответы 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].

    • Автор:

      muffylpxj
    • 1 год назад
    • 1
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years