注意当 i>3 时,可以相隔 2 个位置获得最大值,因此,还需要比较 arr[i] 与 max[i-3] 的和。max 存储的是当前值作为子序列结尾可获取到的最大值
func subsequence( n int , array []int ) int64 {
// write code here
if n ==0{
return 0
}
if n==1{
return int64(array[0])
}
maxSum := make([]int64,n)
var max int64 = math.MinInt64
for i:=0;i<n;i++{
if i==0 || i==1 {
maxSum[i] = int64(array[i])
if maxSum[i] > max{
max =maxSum[i]
}
continue
}
maxSum[i] = findMax(int64(array[i]),int64(array[i])+maxSum[i-2])
if i>3{
maxSum[i] = findMax(maxSum[i],int64(array[i])+maxSum[i-3])
}
if maxSum[i] > max{
max = maxSum[i]
}
}
return max
}
func findMax(a,b int64)int64{
if a>b{
return a
}
return b
}
京公网安备 11010502036488号