Java数据结构与算法(最大子数组和动态规划)

前言

动态规划主要用于解决具有重叠子问题和最优子结构性质的问题。它通过将问题分解为子问题来解决复杂问题,每个子问题仅解决一次,并将其结果存储,以供后续使用,从而避免了重复计算。

对应leetcode. - 力扣(LeetCode)

实现原理

两次循环遍历,采用固定其实位置为i,不断滑动j的思想,来计算i,j区间内的最大值,略暴力。

初始化:dp[i][i]=nums[i];

转移方程:dp[i][j]=dp[i][j-1]+nums[j];

边界条件:无

具体代码实现

package test14;class Solution {public int maxSubArray(int[] nums) {  int[][] dp=new int[nums.length][nums.length+1];int res=nums[0];for(int i=0;i<nums.length;i++){ dp[i][i]=nums[i];res=Math.max(dp[i][i],res);for(int j=i+1;j<nums.length;j++){dp[i][j]=dp[i][j-1]+nums[j];res=Math.max(dp[i][j],res);}}return res;}
}

QA1:能否进行内存优化?

class Solution {public int maxSubArray(int[] nums) {  int res=nums[0];for(int i=0;i<nums.length;i++){ int a=nums[i];res=Math.max(a,res);for(int j=i+1;j<nums.length;j++){int b=a+nums[j];res=Math.max(b,res);a=b;}}return res; }
}

QA2:能否进行时间优化?

更新动态转移方程:pre=Math.max(nums[i]+pre,nums[i])

核心是pre的计算,pre如果大于0,则持续与当前值num[i]相加,如果pre小于0,pre则为更新为num[i]。

class Solution {public int maxSubArray(int[] nums) {  int res=nums[0];int cur=0;for(int i=0;i<nums.length;i++){ cur=Math.max(cur+nums[i],cur[i]);res=Math.max(pre,res);}return res; }
}

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

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

相关文章

Linux统计目录和文件数目

当在终端执行 ls | wc 命令时&#xff0c;ls 命令列出了当前目录中的文件和目录&#xff0c;然后通过管道 | 将输出传递给 wc 命令进行计数。 wc 命令的默认输出包括三列&#xff1a; 行数&#xff08;lines&#xff09;&#xff1a;这通常是文件和目录的总数&#xff0c;但注…

【python】python电影评论数据抓取分析可视化(源码+数据+课程论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

PVc是k8s的什么?

**PVC&#xff08;PersistentVolumeClaim&#xff09;是Kubernetes&#xff08;k8s&#xff09;中的持久化存储卷声明**。它是用户对存储的请求&#xff0c;类似于Pod消耗节点资源的方式&#xff0c;PVC则消耗PV&#xff08;Persistent Volume&#xff0c;持久化卷&#xff09;…

探索教研在线平台的系统架构

教研在线平台作为一家致力于教育技术领域的企业&#xff0c;其系统架构扮演着至关重要的角色。本文将深入探讨教研在线平台的系统架构&#xff0c;从技术架构、数据架构和安全架构等方面进行分析&#xff0c;以期帮助读者更好地理解这一教育科技平台的运作模式。 技术架构是教研…

银河麒麟操作系统通过首批软件供应链安全能力认证

麒麟软件产品供应链安全能力获双重肯定&#xff01;5月30日&#xff0c;经北京赛迪认证中心评估&#xff0c;银河麒麟高级服务器操作系统V10和银河麒麟桌面操作系统V10成为首批获得软件供应链安全能力认证产品&#xff0c;并在操作系统类产品中名列前茅。 软件供应链安全能力评…

常用的国内外公共DNS服务

DNS介绍 DNS&#xff08;全称&#xff1a;Domain Name Service&#xff0c;域名系统&#xff09;&#xff0c;是互联网的核心服务之一&#xff0c;将便于记忆的网址&#xff08;域名&#xff09;和不便记忆的IP地址相互对应&#xff0c;方便普通用户更便捷地访问互联网。 通常…

MP4文件格式

ISO 协议族 ISO/IEC-14496:MPEG-4 协议族,包括 ISO 容器格式、MPEG-4(H.264)视频压缩标准等。ISO/IEC-23008:MPEG-H 协议族,包括 H.265(HEVC)视频压缩标准等。字段类型含义ISO/IEC-14496-1SystemMPEG-4 的复用、同步等系统级特性ISO/IEC-14496-2Video视频压缩标准ISO/I…

一些JVM面试题

Java垃圾回收器的原理 有三对常见的垃圾回收器&#xff1a; 在JDK1.8之前&#xff0c;有三种常见的垃圾回收器&#xff0c; serial serialOld 串行化的垃圾回收 PS PO 多线程并行回收&#xff0c;可以动态调整堆内存的大小&#xff0c;关注系统的吞吐量 ParNew CMS Par…

getifaddrs 函数详解

getifaddrs 函数用于获取系统中所有网络接口的信息。它返回一个链表&#xff0c;链表中的每个节点包含一个 struct ifaddrs 结构&#xff0c;该结构定义在 ifaddrs.h 头文件中。下面是关于 getifaddrs 函数和 struct ifaddrs 结构的详细解析&#xff1a; 1. getifaddrs 函数 …

Github 2024-06-07开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3C++项目3JavaScript项目2Jupyter Notebook项目1TypeScript项目1Vue项目1比特币核心:开源比特币软件 创建周期:4919 天开发语言:C…

09-spring的bean创建流程(一)

文章目录 spring中bean的创建流程finishBeanFactoryInitialization(beanFactory)beanFactory.preInstantiateSingletons();getMergedLocalBeanDefinition(beanName);流程实现FactoryBean接口,里面的对象实例化过程 spring中bean的创建流程 finishBeanFactoryInitialization(be…

HPUX系统Oracle RAC如何添加ASM磁盘

前言 HPUX简介 HP-UX (Hewlett-Packard Unix) 是惠普公司开发的类 Unix 操作系统。自 1980 年代问世以来&#xff0c;HP-UX 在技术和功能上不断发展&#xff0c;适应了多种硬件平台和企业计算需求。以下是 HP-UX 的发展历史概述&#xff1a; 1980 年代&#xff1a;起源与早期…

webflux 拦截器验证token

在WebFlux中&#xff0c;我们可以使用拦截器&#xff08;Interceptor&#xff09;来验证Token。以下是一个简单的示例&#xff1a; 1. 首先&#xff0c;创建一个名为TokenInterceptor的类&#xff0c;实现HandlerInterceptor接口&#xff1a; java import org.springframewor…

【Unity UGUI】Screen.safeArea获取异形屏数据失败

Screen.safeArea获取不到异形屏的尺寸位置等数据 检查AndroidManifest.xml文件是否有设置&#xff1a;android:theme"style/UnityThemeSelector"&#xff0c;没有加上即可 android:theme"style/UnityThemeSelector"

【学习笔记】Windows GDI绘图(十二)双缓冲管理(用GIF动画测试)

文章目录 引言默认双缓冲SetStyle 手动管理双缓冲图形BufferedGraphicsManager缓冲图形管理器BufferedGraphicsContext 缓冲图形上下文BufferedGraphics 图形缓冲区验证双缓冲的效果(Gif动画显示非正常速度)结束语性能对比 引言 图形编程中一个常见的问题就是闪烁&#xff0c;…

SpringBoot高手之路-springboot原理篇

配置文件优先级 SpringBoot原理篇-多环境配置

UG编程的材料叫什么:深入解析UG编程中的材料选择与应用

UG编程的材料叫什么&#xff1a;深入解析UG编程中的材料选择与应用 在UG编程这一高精尖的制造领域中&#xff0c;材料的选择不仅关乎产品的最终质量&#xff0c;还直接影响着生产效率与成本控制。那么&#xff0c;UG编程的材料究竟叫什么呢&#xff1f;本文将从四个方面、五个…

深入探讨 Java 18 的主要新特性,分析其设计理念和实际应用

Java 18 作为 Java 的最新版本,引入了一系列的新特性和改进,这些变化不仅提升了语言的性能和安全性,也为开发者提供了更多的工具和选项,简化了开发过程,提高了代码的可读性和维护性。本文将深入探讨 Java 18 的主要新特性,分析其设计理念和实际应用,帮助读者理解这些新特…

[职场] 社保和商业保险有什么区别?可以只买商保不买社保吗? #微信#经验分享#媒体

社保和商业保险有什么区别&#xff1f;可以只买商保不买社保吗&#xff1f; 我们在提到社保和商业保险时&#xff0c;经常会听到这样一句话&#xff1a;“社保是基础&#xff0c;商保是补充。” 为什么会这样说呢&#xff1f;社保和商保有什么区别呢&#xff1f;今天&#xf…

hana 中的缓存视图功能,类似ORACLE 中的 物化视图功能

为什么启用物化视图、缓存视图这里就不过多解释了。 参考官方文章&#xff1a; Static Result Cache | SAP Help Portal 在 HANA中&#xff0c;视图的缓存分 静态结果缓存 和 动态结果缓存。 静态结果缓存和动态结果缓存是缓存查询结果以获得性能优势的可配置应用程序。 缓…