最大不相邻子序列和

不相邻最大子序列和

http://www.nowcoder.com/questionTerminal/269b4dbd74e540aabd3aa9438208ed8d

图片说明
注意当 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
}
全部评论

相关推荐

11-29 11:21
门头沟学院 Java
总包48.5w,意想不到的价格
想开了的垂耳兔很喜欢拱白菜:转人工
点赞 评论 收藏
分享
我在朝九晚六双休的联想等你:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务