在 Go 语言中,可以通过遍历数组并记录连续递减子序列的长度来实现找出最大长度的连续递减子序列。以下是一个实现示例:
package main
import (
"fmt"
)
func maxDecreasingLength(arr []int) int {
if len(arr) == 0 {
return 0
}
maxLength := 1
currentLength := 1
for i := 1; i < len(arr); i++ {
if arr[i] < arr[i-1] { // 如果当前元素小于前一个元素,递减
currentLength++
} else { // 否则重置当前长度
if currentLength > maxLength {
maxLength = currentLength
}
currentLength = 1 // 重置为1,因为当前元素是新的开始
}
}
// 检查最后一个子序列的长度是否需要更新maxLength
if currentLength > maxLength {
maxLength = currentLength
}
return maxLength
}
func main() {
arr := []int{5, 3, 4, 2, 1}
result := maxDecreasingLength(arr)
fmt.Println("最长连续递减子序列的长度:", result) // 输出: 最长连续递减子序列的长度: 3 (5,3 或者4,2,1)
}
示例解释:
maxDecreasingLength
函数遍历输入数组,比较每对相邻元素。- 如果当前元素小于前一个元素,
currentLength
增加;否则,将currentLength
和maxLength
比较并更新。 - 在循环结束后,需要检查最后一次计算的
currentLength
是否为最大的。
运行上面的代码会得到输入 [5, 3, 4, 2, 1]
的输出,结果是最长连续递减子序列的长度,这里是 3
(可以是 [5, 3]
或者 [4,2,1]
)。你可以根据具体需求调整这个程序!
内容由零声教学AI助手提供,问题来源于学员提问