千家信息网

Java怎么求一个整型数组中最大连续子序列的和

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"Java怎么求一个整型数组中最大连续子序列的和",在日常操作中,相信很多人在Java怎么求一个整型数组中最大连续子序列的和问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2026年11月01日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安全错误 数据库的锁怎样保障安全 互联网扶贫科技 互联网科技卖菜 与互联网科技公司 合肥互联网科技公司 迪茉互联网科技 深圳艾佳互联网科技 互联网科技公司名称 汉立互联网科技有限公司联系电话 上海电发互联网科技有限公司 成都玖崟互联网科技有限公司乐商圈怎么样 西藏七维空间互联网科技有限公司 金融科技与互联网金融相同和不同 黑科技闪耀互联网之光 互联网科技革命什么开始 注册互联网科技公司经营范围大全 佛山市拉法互联网科技有限公司 美国互联网科技公司 宇信科技在杭州互联网排第几 扫呗互联网科技有限公司 亚光科技低轨卫星互联网 互联网科技公司经营范围 互联网科技工作委员会毛军 一五八零互联网科技 互联网科技公司做什么 互联网科技中介 恒生互联网科技指数跳水 世界互联网领先科技成果获奖 科技互联网海报 平安好医生打造互联网科技医疗 瑞安市蟠桃会互联网科技有限公司
0