动态规划中等 NC144 不相邻最大子序列和

NC144 不相邻最大子序列和

描述

给你一个n(1\leq n\leq10^51≤n≤10 5),和一个长度为n的数组,在不同时选位置相邻的两个数的基础上,求该序列的最大子序列和(挑选出的子序列可以为空)。

分析

  1. 当元素取2147483647时,加几次就超出int的范围,因此建立long型数组。
  2. 当全部元素是负值,结果应该返回0,当有一个整数时,应该返回这个正数,因此建立的数组应该包含0,保证最差也不会低于0,以及不会使正数受负数影响变小。
import java.util.*;
public class Solution {
    public long subsequence (int n, int[] array) {
        if(n == 0){
            return 0;
        }
        if(n == 1){
            if(array[0] < 0){
                return 0;
            }
            return array[0];
        }
        long[] dp = new long[n+1];
        dp[0] = 0;
        dp[1] = Math.max(0,array[0]);
        for(int i = 2; i < n + 1; i++){
            dp[i] = Math.max(dp[i-1],dp[i-2] + array[i-1]);
        }
        
        return dp[n];
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值