Java怎么求一个整型数组中最大连续子序列的和
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要介绍"Java怎么求一个整型数组中最大连续子序列的和",在日常操作中,相信很多人在Java怎么求一个整型数组中最大连续子序列的和问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年02月04日Java怎么求一个整型数组中最大连续子序列的和
这篇文章主要介绍"Java怎么求一个整型数组中最大连续子序列的和",在日常操作中,相信很多人在Java怎么求一个整型数组中最大连续子序列的和问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java怎么求一个整型数组中最大连续子序列的和"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
/**
动态规划(Dynamic Programming):
1)将待求解的问题分解为若干个子问题(即:将求解的过程分为若干阶段),按顺序求解子问题,前一子问题的解,为后一子问题的求解提供了有用的信息;
2)在求解任一子问题时,列出可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其它的局部解;
3)依次解决各子问题,最后一个子问题的解就是初始问题的解。
问题:求一个整型数组中最大连续子序列的和,数组中既包含正整数也包含负整数。
举例:数组int[] array = {1, -3, 7, 8, -4, 10, -19, 11};中最大连续子序列为:7, 8, -4, 10 它们的和为21
*/
public class DP {/** * 暴力求解 * * 时间复杂度:O(N^2) */public static int maxSubSumByEnum(int[] array) { int maxSum = 0; int begin = 0; int end = 0; /** * 1)第i次循环结束后可以找到:以第i个元素为起点的连续子序列的最大值。 * 2)i表示序列的起点,j表示序列的终点。 * 3)每一次循环中将终点不断向后移动:每次向后移动一位并且计算当前序列的和,循环结束后,我们就可以得到本次循环中子序列和最大的值。 */ for (int i = 0; i < array.length; i++) { // int tempSum = 0; for (int j = i; j < array.length; j++) { tempSum += array[j]; if (tempSum > maxSum) { maxSum = tempSum; begin = i; end = j; } } } System.out.println("begin:" + begin + " end:" + end); return maxSum;}/** * 动态规划 * * 时间复杂度:O(N) * * 要点: * 1)若当前阶段中连续子序列的和小于0,则进入下一阶段,同时确定下一阶段的起点并将下一阶段的和初始化为0。 * 2)只有当前阶段的总和大于历史最大总和时,才会去更新数组中最大连续子序列的起点和终点。 */public static int maxSubSumByDP(int[] array) { int maxSum = 0; // 数组中,最大连续子序列的和 int begin = 0; // 数组中,最大连续子序列的起点 int end = 0; // 数组中,最大连续子序列的终点 int tempSum = 0; // 当前阶段中,连续子序列的和 int tempBegin = 0; // 当前阶段中,连续子序列的起点 for (int i = 0; i < array.length; i++) { tempSum += array[i]; if (tempSum < 0) { // 若当前阶段中连续子序列的和小于0,则进入下一阶段 tempSum = 0; // 下一阶段的和进行归零处理 tempBegin = i + 1; // 下一阶段的起点 } else if (tempSum > maxSum) { // 若当前阶段的总和大于历史最大总和,则更新数组中最大连续子序列的起点和终点。 maxSum = tempSum; begin = tempBegin; end = i; } } System.out.println("begin:" + begin + " end:" + end); return maxSum;}public static void main(String[] args) { int[] array = {1, -3, 7, 8, -4, 10, -19, 11}; int dpMax = maxSubSumByDP(array); System.out.println(dpMax); int enumMax = maxSubSumByEnum(array); System.out.println(enumMax);}
}
到此,关于"Java怎么求一个整型数组中最大连续子序列的和"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
序列
最大
数组
问题
阶段
起点
终点
总和
学习
循环
局部
复杂
个子
动态
历史
复杂度
整数
时间
更多
帮助
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
三明市软件开发公司
认证是不是网络安全
上海软件开发价格多少
魔兽60数据库 任务
软件开发中心岗位描述
序列数据库 green
武汉中科大网络安全
中行软件开发中心电话
mysql跨服务器管理
丰台区有名的软件开发不二之选
如何建立dns服务器
嘉定区新能源软件开发销售厂家
ngb网络技术与应用实验
软件开发的工资好找吗
文件服务器为啥有些文件不能存
泰州海航软件开发来电咨询
手动添加无线网络安全性
风之虎网络技术待遇
邯郸迅捷软件开发有限公司
百事通网络技术
分局网络安全大队
数据库应用技术单元自测答案
数据库不要密码
网络安全和安防
玉环市公安局网络安全
传说中的一个数据库
手机软件开发要学习什么
服务器文件共享查找不到计算机
微信时代与网络安全管理
北京联众网络技术公司