为了账号安全,请及时绑定邮箱和手机立即绑定

如何为数组的最后一个元素添加特殊条件

如何为数组的最后一个元素添加特殊条件

Go
莫回无 2022-12-13 16:19:47
根据任务描述,输出应该是一个新数组,其中数组 days 的所有元素都大于其上一个和下一个元素(以 1 为增量)。例如,我们有作为输入[ ]int{3, 2, 4, 3, 7, 9}输出应该是:[ ]int{3, 4, 9}起初我试着写下一个条件:if days[i] > days[i-1] && days[i] > days[i+1] {            arr = append(arr, days[i])        }但发生错误:index out of range [-1]然后我改变了条件并为最后一个元素添加了一个特殊条件:package mainimport (    "fmt")func chaos(days []int) []int {    var arr []int    for i := 0; i < len(days)-1; i++ {        if days[i] > days[i+1] {            arr = append(arr, days[i])        }        if days[len(days)-1] > days[len(days)-2] {            arr = append(arr, days[len(days)-1])        }    }    return arr}func main() {    fmt.Println(chaos([]int{3, 2, 4, 3, 7, 9}))}但输出是[3 9 9 4 9 9 9]如何正确指定最后一个元素的条件以及为什么我的结果不正确?
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

9多次填充的原因是因为您在循环if内使用以下条件for。将其放在循环if之外for,然后您将获得所需的输出:


if days[len(days)-1] > days[len(days)-2] {

        arr = append(arr, days[len(days)-1])

    }

但是,除此之外,您还只是将i'th元素与下一个元素进行比较。根据问题,您还应该将它与之前的元素进行比较。以下是可以在您的代码中进行的可能更改以正常工作:


package main


import (

    "fmt"

)


func chaos(days []int) []int {

    var arr []int

    fmt.Println(len(days))


    if days[0] > days[1] {

        arr = append(arr, days[0])

    }


    for i := 1; i < len(days)-1; i++ {

        if (days[i] > days[i+1]) && (days[i] > days[i-1]) {

            arr = append(arr, days[i])

        }

    }


    if days[len(days)-1] > days[len(days)-2] {

        arr = append(arr, days[len(days)-1])

    }

    return arr

}


func main() {

    fmt.Println(chaos([]int{3, 2, 4, 3, 7, 9}))

}

https://go.dev/play/p/ndJVc35TM1O


查看完整回答
反对 回复 2022-12-13
?
智慧大石

TA贡献1946条经验 获得超3个赞

您可以将math.MinInt64(可以视为负无穷大)添加到切片的开始和结束,以轻松处理两种边缘情况。然后从一个索引开始迭代1到另一个索引n-2(通过排除0和n-1我们添加的条目)。


我会像下面那样尝试。


package main


import (

    "fmt"

    "math"

)


func chaos(days []int) []int {

    var arr []int

    // Add negative infinity to the start

    days = append([]int{math.MinInt64}, days...)

    // Add negative infinity to the end

    days = append(days, math.MinInt64)

    for i := 1; i <= len(days)-2; i++ {

        if (days[i] > days[i+1]) && (days[i] > days[i-1]) {

            arr = append(arr, days[i])

        }

    }

    return arr

}


func main() {

    fmt.Println(chaos([]int{3, 2, 4, 3, 7, 9}))

}


查看完整回答
反对 回复 2022-12-13
  • 2 回答
  • 0 关注
  • 57 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信