2 回答

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

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}))
}
- 2 回答
- 0 關注
- 105 瀏覽
添加回答
舉報