注意当 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 }