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 关注
- 77 浏览
添加回答
举报