当前位置: 首页 > news >正文

每日OJ题_牛客_连续子数组最大和_线性dp_C++_Java

目录

牛客_连续子数组最大和_线性dp

题目解析

C++代码

Java代码


牛客_连续子数组最大和_线性dp

连续子数组最大和_牛客题霸_牛客网 (nowcoder.com)

描述:

        给定一个长度为 n的数组,数组中的数为整数。请你选择一个非空连续子数组,使该子数组所有数之和尽可能大,子数组最小长度为1。求这个最大值。


题目解析

  • 状态表示: dp[i] 表示:以 i 位置为结尾的所有子数组中,最大和是多少。
  • 状态转移方程: dp[i] = max(dp[i - 1] + arr[i], arr[i])

C++代码

#include <iostream>
#include <vector>
using namespace std;int main()
{int n = 0;cin >> n;vector<int> a(n);for(int i = 0; i < n; ++i){cin >> a[i];}vector<int> dp(n);int res = a[0];dp[0] = a[0];for(int i = 1; i < n; ++i){dp[i] = max(dp[i - 1] + a[i], a[i]);res = max(res, dp[i]);}cout << res << endl;return 0;
}

Java代码

import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main
{public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] arr = new int[n + 1];int[] dp = new int[n + 1];for(int i = 1; i <= n; i++){arr[i] = in.nextInt();}int ret = -101;for(int i = 1; i <= n; i++){dp[i] = Math.max(dp[i - 1], 0) + arr[i];ret = Math.max(ret, dp[i]);}System.out.println(ret);}
}

http://www.mrgr.cn/news/52300.html

相关文章:

  • oracle 19c 配置开机自启动
  • 系统思考—战略共识
  • 10.17作业
  • 多态底层原理【附原理模型图】
  • 学习之上下文管理器
  • 提供综合康复服务的武汉自闭症全托管学校
  • 记一次有趣的发现-绕过堡垒机访问限制
  • 如何排查CPU占用率过高的问题
  • Redis过期Key的逐出策略
  • 潜水定位通信系统的功能和使用方法_鼎跃安全
  • JDBC的学习
  • 一个标准java程序的创建和使用
  • Oracle 常见索引扫描方式概述,哪种索引扫描最快!
  • DHCP和VRRP协议
  • 公司名称抖音头条百科创建包过包收录
  • 数据结构-B树和B+树
  • 《云端守望者》
  • 视频去水印软件3款推荐:好用的去水印软件分享!
  • FreeRTOS - 中断管理
  • Creo7.0软件安装教程+Creo7.0三维建模中文安装包下载