Java怎么求一个整型数组中最大连续子序列的和
发表于:2024-10-17 作者:千家信息网编辑
千家信息网最后更新 2024年10月17日,这篇文章主要介绍"Java怎么求一个整型数组中最大连续子序列的和",在日常操作中,相信很多人在Java怎么求一个整型数组中最大连续子序列的和问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2024年10月17日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安全错误
数据库的锁怎样保障安全
2008服务器iis配置
网络安全监管何去何从
网络安全技术员演讲
苏州乐途网络技术有限公司
有品服务器
网络安全知识入门课程
数据库表查询两个字段都有的数据
蛟河市网络安全局
旅馆网络安全
网络安全为人民教案
数据库的delete语句
广州广电五舟服务器什么水平
软件开发工程师需要哪些
dos登录服务器命令
嵌入式软件开发找工作
网络安全风险值计算题
笔记本电脑键入网络安全密钥
河南金伙伴网络技术有限公司
湖北省计算机网络技术比赛
v2x应用软件开发公司
苹果电脑直连服务器
连云港网络安全审计系统咨询机构
高级软件开发环境怎么样
健康码打开提示服务器繁忙
软件开发工程师英文全称
个人软件开发技术指导
数据库二级和三级
impdp导入其它库数据库
青岛税务安全接入服务器地址
坚锋网络技术有限公司怎么样