经典DP-最大子数组

news2024/11/17 13:19:20

连续子数组的最大和

代码

//定义一个名为"连续子数组的最大和"的公共类  
public class 连续子数组的最大和 {  

 // 定义一个静态变量maxn,并赋值为100010  
 static int maxn=100010;  

 // 定义一个静态的整数数组dp,大小为maxn  
 static int[] dp=new int[maxn];  

 // 定义一个公共方法maxSubArray,它接受一个整数数组nums作为参数  
 public int maxSubArray(int[] nums) {  
     // 初始化maxValue为nums数组的第一个元素  
     int maxValue = nums[0];  

     // 初始化dp数组的第一个元素为nums数组的第一个元素  
     dp[0] = nums[0];  

     // 使用for循环遍历nums数组,从第二个元素开始(索引为1)  
     for(int i=1; i<nums.length; i++) {  
         // 将dp数组的当前位置初始化为nums数组的当前元素  
         dp[i] = nums[i];  

         // 如果dp数组的前一个位置的值大于0,则将dp数组的前一个位置的值加到当前位置  
         if(dp[i-1]>0) {  
             dp[i] += dp[i-1];  
         }  

         // 更新maxValue,如果dp数组的当前位置的值大于maxValue,则更新maxValue  
         maxValue = Math.max(maxValue, dp[i]);  
     }  

     // 返回maxValue,即最大子数组的和  
     return maxValue;  
 }  

 // 主方法,程序的入口点  
 public static void main(String[] args) {  
     // 创建一个"连续子数组的最大和"类的实例  
     连续子数组的最大和 solution = new 连续子数组的最大和();  

     // 定义并初始化一个测试用的整数数组nums  
     int[] nums= {-2,1,-3,4,-1,2,1,-5,4};  

     // 调用solution对象的maxSubArray方法,并将结果存储在result变量中  
     int result = solution.maxSubArray(nums);  

     // 打印result的值到控制台  
     System.out.println(result);  
 }  
}

详解

  1. 变量定义:

    • maxn=100010: 这是一个静态变量,用于定义数组 dp 的大小。这个值可能是为了确保 dp 数组足够大,以容纳可能的所有情况,但在此特定问题中,这个大小可能是过度的。通常,为了简化,你可以直接使用输入数组 nums 的长度作为 dp 的大小。
    • dp[]: 这是一个动态规划数组,用于存储从数组开始到当前位置的最大子数组和。
  2. maxSubArray 方法:

    • 这个方法接受一个整数数组 nums 作为输入,并返回最大子数组的和。
    • maxValue 是用来存储当前找到的最大子数组和。开始时,它被初始化为 nums[0],因为第一个元素自身就是一个子数组。
    • dp[0] 被初始化为 nums[0],表示从数组开始到第一个元素的最大子数组和。
    • 使用一个循环遍历 nums 数组。在每一步中,都会更新 dp[i] 的值:
      • 首先,dp[i] 被初始化为 nums[i],表示当前元素自身作为一个子数组的和。
      • 然后,检查 dp[i-1](即从数组开始到前一个元素的最大子数组和)是否大于0。如果是,那么将 dp[i-1] 加到 dp[i] 上,表示将当前元素与前一个最大子数组结合起来可能会得到一个更大的子数组和。
      • 使用 Math.max(maxValue, dp[i]) 更新 maxValue,确保它始终存储最大的子数组和。
    • 循环结束后,返回 maxValue
  3. main 方法:

    • 这是一个标准的Java主方法,用于测试 maxSubArray 方法。
    • 创建一个 连续子数组的最大和 类的实例 solution
    • 定义一个测试数组 nums
    • 调用 solution 的 maxSubArray 方法,并将结果存储在 result 中。
    • 打印 result

当你运行这个程序时,它会输出 6,这是数组 {-2,1,-3,4,-1,2,1,-5,4} 中最大子数组的和(子数组为 {4,-1,2,1})。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1479400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java毕业设计-基于springboot开发的Web社区医院管理服务系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、用户功能模块4、医生功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发…

官网万词霸屏推广+关键词排名优化源码系统 带完整的安装代码包以及搭建教程

随着搜索引擎算法的不断更新和市场竞争的加剧&#xff0c;传统的SEO方法已经难以满足企业对于快速、高效推广的需求。罗峰结合多年的互联网营销经验和最新的搜索引擎优化技术&#xff0c;给大家推荐一款集网站搭建、关键词优化、数据分析于一体的源码系统。 以下是部分代码示例…

如何使用Spring Boot轻松实现国际化和本地化

文章目录 什么是国际化SpringBoot 国际化实践出真知新建Properties文件修改配置文件测试获取所有国际化资源 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 什么是国际化 国际化&…

opencv--使用直方图找谷底进行确定分割阈值

直方图原理就不说了&#xff0c;大家自行百度 直方图可以帮助分析图像中的灰度变化&#xff0c;进而帮助确定最优二值化的灰度阈值&#xff08;threshold level&#xff09;。如果物体与背景的灰度值对比明显&#xff0c;此时灰度直方图就会包含双峰&#xff08;bimodal histo…

Java核心API-多线程

多线程 文章目录 多线程前言一、多线程1、多线程的概念2、多线程的好处 二、主线程1、Thread类2、主线程 三、线程的创建和启动1、创建线程的两种方式2、使用线程的步骤 四、继承Thread类创建线程五、实现Runnable接口创建线程六、比较两种创建线程的方式1、继承Thread类2、实现…

Python爬取网站视频资源

思路&#xff1a; 在界面找到视频对应的html元素位置&#xff0c;观察发现视频的url为https://www.pearvideo.com/video_视频的id&#xff0c;而这个id在html中的href中&#xff0c;所以第一步需要通过xpath捕获到所需要的id 在https://www.pearvideo.com/video_id的页面&…

C语言while 语句的基本格式是什么?

一、问题 C语⾔中有三种循环语句&#xff0c;while 语句是其中的⼀个&#xff0c;它的基本格式是怎样的呢&#xff1f; 二、解答 while 语句的⼀般形式为&#xff1a; while(表达式) 语句; 其中&#xff0c;表达式是循环条件&#xff0c;语句为循环体。 注意&#xff1a; …

测试环境搭建整套大数据系统(七:集群搭建kafka(2.13)+flink(1.13.6)+dinky(0.6)+iceberg)

一&#xff1a;搭建kafka。 1. 三台机器执行以下命令。 cd /opt wget wget https://dlcdn.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz tar zxvf kafka_2.13-3.6.1.tgz cd kafka_2.13-3.6.1/config vim server.properties修改以下俩内容 1.三台机器分别给予各自的broker_id…

奇点云:SAFe框架下,我们对平台软件工程生产线做了4项改造

导读&#xff1a; 客户规模扩大&#xff0c;如何保证大数据软件产品和服务质量始终如一&#xff1f;几乎所有成长中的软件厂商&#xff0c;尤其是需要通过私有化部署交付的厂商&#xff0c;都会面临这个问题。正如《人月神话》中多次表明的&#xff0c;单纯地增加人手、扩大团队…

npm使用国内淘宝镜像的方法整理

命令配置安装&#xff1a; 淘宝镜像&#xff1a; npm config set registry https://registry.npm.taobao.org/ 官方镜像&#xff1a; npm config set registry https://registry.npmjs.org 通过cnpm安装&#xff1a; npm install -g cnpm --registryhttps://registry.npm.…

Java-常用集合

Jva常用集合 一、Java 集合框架体系二、Collection接口和方法1. List接口List 接口主要实现类&#xff1a;ArrayListList 的实现类之二&#xff1a;LinkedListList 的实现类之三&#xff1a;Vector 2. Set接口Set 主要实现类&#xff1a;HashSetSet 实现类之二&#xff1a;Link…

SpringBoot 手写 Starter

spring-boot-starter 模块 1.介绍 SpringBoot中的starter是一种非常重要的机制&#xff0c;能够抛弃以前繁杂的配置&#xff0c;将其统一集成进starter&#xff0c;应用者只需要在maven中引入starter依赖&#xff0c;SpringBoot就能自动扫描到要加载的信息并启动相应的默认配…

WordPress分类目录ID怎么看?如何查找WordPress标签ID?

在WordPress网站中&#xff0c;我们需要判断某篇文章是否属于某个分类目录&#xff0c;或者是否拥有某个标签&#xff0c;那么就需要用到分类目录ID和标签ID&#xff0c;那么WordPress分类目录ID怎么看&#xff1f;如何查找WordPress标签ID&#xff1f;下面boke112百科就跟大家…

MySQL 自增列解析(Auto_increment)

MySQL数据库为列提供了一种自增属性&#xff0c;当列被定义为自增时。Insert语句对该列即使不提供值&#xff0c;MySQL也会自动为该列生成递增的唯一标识&#xff0c;因此这个特性广泛用于主键的自动生成。 一、自增列的用法 自增列具有自动生成序列值&#xff0c;整型&#…

Linux系统编程入门(下)

Linux系统编程 第一章 Linux系统编程入门&#xff08;下&#xff09;1.6 GDB 调试1.7 标准C库IO函数和Linux系统IO函数对比 第一章 Linux系统编程入门&#xff08;上&#xff09; 第一章 Linux系统编程入门&#xff08;下&#xff09; 1.6 GDB 调试 &#xff08;1&#xff0…

AOP(黑马学习笔记)

AOP基础 学习完spring的事务管理之后&#xff0c;接下来我们进入到AOP的学习。 AOP也是spring框架的第二大核心&#xff0c;我们先来学习AOP的基础。 在AOP基础这个阶段&#xff0c;我们首先介绍一下什么是AOP&#xff0c;再通过一个快速入门程序&#xff0c;让大家快速体验A…

JVM性能优化

运行时优化 方法内联 方法内联&#xff0c;是指 JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身 &#xff0c;从而消除调用成本&#xff0c;并为接下来进一步的代码性能优化提供基础&#xff0c;是JVM的一个重要优化手段之一。 注&#xff1a; C的inline属于编…

构建一个基于Node.js的文件存储服务

随着现代web应用程序变得越来越复杂和功能强大&#xff0c;文件存储服务成为了许多应用的重要组成部分。在本篇博客中&#xff0c;我们将探讨如何构建一个基于Node.js的文件存储服务&#xff0c;让您可以轻松地上传、下载和管理文件。我们将利用Node.js的强大功能和模块来构建这…

【Javascript编程实操01】判断最大数、奇偶数、是否成年

目录 前言 1、求两个数的最大数 代码&#xff1a; 实现效果&#xff1a; 2、判断一个整数是偶数还是奇数 代码&#xff1a; 实现效果&#xff1a; 3、判断一个人的年龄是否满18岁 代码&#xff1a; 实现效果&#xff1a; 总结 前言 从今天开始正式进入了Web前端第二…

信安数学(验证定理6.3.2~6.3.3)

定理6.3.2 如果n是对于基b的强伪素数&#xff0c;则n是对于基b得到欧拉伪素数 nint(input("给定一奇合数n&#xff1a;")) bint(input("给定一个整数b&#xff1a;")) def solution(a,b):#若b>a&#xff0c;则交换两个数的值if(b>a):taabbtr b #初…