根據任務描述,輸出應該是一個新陣列,其中陣列 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 main
import (
"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]
如何正確指定最后一個元素的條件以及為什么我的結果不正確?
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
您可以在切片的開頭和結尾添加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}))
}
去游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475620.html
