一个有N个整数元素的一维数组{A[0],A[1],....,A[N-1],A[N]},这个数组有很多连续的子数组,那么连续子数组之和的最大的一个的值是什么?

1.动态规划的思想解决

  /**
     * 在时间复杂度为O(N)内找出数组中最大的子序列的累加和
     */
    public static int sumNum(int[] array) {
        int n = array.length;
        int all = array[n - 1], start = array[n - 1];
        int count = 0;
        for (int i = n - 2; i >= 0; i--) {
            if ((start + array[i]) > array[i]) {
                start = start + array[i];
            } else {
                start = array[i];
            }
            if (all < start) {
                all = start;
            }
            count++;
        }
        System.out.println("数组长度:" + array.length + ",  时间复杂度:" + count);
        System.out.println("最大值" + all);
        return all;
    }
时间: 2024-10-12 16:20:50

一个有N个整数元素的一维数组{A[0],A[1],....,A[N-1],A[N]},这个数组有很多连续的子数组,那么连续子数组之和的最大的一个的值是什么?的相关文章

《团队开发一(求一个数组的连续的子数组之和的最大值)》

(1)设计思想:一般的,求一个数组的最大子数组之和即是按数组顺序依次让前几个数的和与下一个数进行比较,设一变量来装每次比较后的较大的数,依此进行到数组终端:但是考虑到求的是连续的子数组,则应该想到除了在按顺序上的连续外,还得考虑到末端与首端的连续,所以按数组顺序依次求解得到的未必就是连续的最大的子数组之和,故此必须在此种情况下也求解出最大子数组之和,方法即是同时从数组的两端依次进行求出各自的最大子数组之和,然后在相遇前求和后与之前所求的最大子数组之和依次相比较,取它们中最大的一个作为连续的最大子

一维数组子数组之和

题目:返回一个一维整数数组中最大子数组的和. 要求: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 设计思想: 生成数组,生成子数组,求和,求最大值. 代码: package bao; import java.util.*; public class Msum { public static void main(String args[]) { Scanne

返回一个二维整数数组中最大联通子数组的和(思路)

返回一个二维整数数组中最大联通子数组的和 题目: 输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值. 思路: (方法一)首先若要对二维数组进行分析,通常想要把它化简成为一个一维数组.再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标.这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到:第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价.最后得到的就是最大联通子数组的和. (方

子数组返回一个整数数组中最大的和

本次实验的要求: 1要求程序必须能处理1000个程序: 2每个元素是int32类型的,出现子数组之和大于整型表示的最大范围会是什么情况: 3输入一个整形数组,数组里有正数也有负数. 4数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 5求所有子数组的和的最大值.要求时间复杂度为O(o). 设计思路: 将数组的大小定义为1000,每个元素定义为int32类型,取数值时对数成2的32次方,这样数值可以越界. 程序代码 #include <iostream>  #include<

找出一个整数数组的和最大的连续子数组

题目: 给任意一个整数数组,找出这个数组的和最大的连续子数组(子数组的和最大且子数组连续).要求:算法的时间复杂度为O(n). 程序设计思想: 1:用maxValue记录当前连续子数组和为最大的和的值,初始化其值为:maxValue=a[0].注:记数组为a[n]. 2:这个过程总的思想就是,从数组头开始往后,每次加进一个值,它们的和记为tempValue,若tempValue比新加进来的数值本身要小,应该从这个位置开始重新开始计算tempValue的值.而每次的tempValue都应该和max

《返回一个二维整数数组中最大联通子数组的和》

设计思想:(1)首先把这个二维数组按行的数目分解为与列数目具有相同数目的一维数组: (2)再分别求出这几个一维数组的最大连续子数组之和,分别记录每一个最大连续数组的首末位置: (3)接着分别比较看这几个一维数组的首末位置是否处于矩阵上相连的位置,找出位置上相连且之和为最大的数组,输出它们的和即可. 源代码: #include<iostream> using namespace std; int Max(int n,int a[],int *smark,int *mmark) { int b[1

返回一个二维整数数组的最大联通子数组的和

题目:返回一个二维整数数组中最大联通子数组的和. 要求:输入一个二维整形数组,数组里有正数也有负数.求所有子数组的和的最大值. 一.设计思想 先求出这个这个数组中的最大值,并定位,然后找出这个值周围的4个数,联通这4个数中的正数,若全为负数,则查找次大值,并与最大值联通,判断联通前与联通后值得大小,若变小则不联通最大值,若变大则联通最大值,以此类推,直到最大联通子数组怎么联通都比原来的值小.

返回一个二维数组最大联通子数组的和

一.题目 输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值. 二.设计思想 方法一:首先若要对二维数组进行分析,之前我们已经做过关于一位数组的练习,所以我们可以把它化简成为一个一维数组.再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标.这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到:第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价.最后得到的结果就是最大联通子数组的和

软件工程结对开发之求一个数组中连续最大子数组之和

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设sum[i]为以第i个元素结尾且和最大的连续子数组.对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且它们之和最大的连续子数组要么是以第i-1个元素结尾且它们之和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i] = max(sum[i-1] + arr[i], arr[i]).可以通过判断sum[i-1] + arr[i]是否大于arr[i]来做