亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為數組的最后一個元素添加特殊條件

如何為數組的最后一個元素添加特殊條件

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 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號