一个关于求数组内最大子数组的和的小程序以及一周总结

一个数组内有正数和负数,而且数组是循环的。求数组内最大子数组的和。要求数组是算法空间复杂度为O(1)。

思路:

1.求出每个子数组的值,比较大小。

2.定义一个参数,为数组的长度。

3.构造另外的数组,使得是原数组的得到两个集合。比如a={1,2,3,4}.b={1,2,3,4,1,2,3,4};

4.这样可以满足数组的循环,参数为原数组的长度。

代码如下:

package zuida;
import java.io.*;
import java.util.Scanner;
class qiu
{
    public int shuchu(int a,int l,int f[],int x)
    {
        int m[]=new int[l*(l+1)/2];
        m[0]=f[a];
        a=a+1;
        int b=1,s=0;
        for(int i=a;i<x+s;i++)//从第一位开始循环,控制循环长度
        {
            if(i==x-1)//如果循环到最后一位
            {

                m[b]=m[b-1]+f[i];
                i=a+s;//从原数组的下一位开始
                s++;//起始位置加1
                b++;
                m[b]=f[i];
                b++;

            }
            else//如果没有到最后一位
            {
            m[b]=m[b-1]+f[i];//将每一位都求和累加,求出每个子数组的和,保存在数组m中
            b++;
            }
        }
        int t=m[0];
        for(int i=1;i<l*(l+1)/2;i++)
        {
            if(t<m[i])
            {
            t=m[i];
            }
        }
        return t;
    }
}
public class shu {
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        int f[]={1,2,-3,0,7,-8,4};//原数组
        int ff[]={1,2,-3,0,7,-8,4,1,2,-3,0,7,-8,4};//构造的循环数组。使得可以循环
        int n=7;
        int s[]=new int[n];
        qiu m=new qiu();
        int t=m.shuchu(0,2*n,ff,n);//调用类的函数,第一个参数为起始位置,第二个为数组的长度,最后一个参数原数组的长度
        System.out.println("最大子数组的和为:"+t);//输出最大值

    }

}
;

结果图:

项目计划总结


任务

日期(min)


听课


阅读课


编程


准备考


日总计


周日


星期一


160


70


70


星期二


150


150


星期三


120


120


星期四


80


80


星期五


60


60


星期六


70


70


周总计

时间记录日志


开始时间


结束时间


中断时间


净时间


活动


备注


3月27日


18:40


21:00


10min


70min


听课,编程


四则运算网页版


3月28日


19:10


21:30


10min


110min


编程


四则运算网页版


3月29日


19:20


21:20


10min


110min


阅读


四则运算网页版


3月30日


19:00


21:00


20min


100min


编程


四则运算网页版


3月31日


16:00


17:30


90min


编程


四则运算网页版


4月1日


18:30


21:30


10min


110min

 

错误总计


3月28日


无法正确跳转页面,


3月29日


不能实现一些参数的传递


3月30日


数组库调取错误


3月31日


页面的优化

 

时间: 2024-12-21 00:41:51

一个关于求数组内最大子数组的和的小程序以及一周总结的相关文章

求一个数组的最大子数组(C/C++实现)

最大子数组:要求相连,加起来的和最大的子数组就是一个数组的最大子数组.编译环境:VS2012,顺便说句其实我是C#程序员,我只是喜欢学C++. 其实这是个半成品,还有些BUG在里面,不过总体的思路是这样的,求最大的子数组,由一个中位分开,就是数组的中间位置,然后分别求中间位置横跨的,左边的,和右边的最大的,然后比较三者的大小,最大的为最大子数组.思路来自算法导论.今天算是把伪代码都实现了,但是貌似有点BUG,不知道有大神帮我提一下不?为了节约时间,我索性把一些问题的解释放过来,是算法导论的,我也

求一个二维数组的最大子数组

小组成员:周其范  胡宝月 上课的时候老师布置的题目是求一个二维数组的最大子数组,因为以前的时候老师要求我们做过一个题目就是求一个数组的最大子数组,当时的方法就是利用循环把所有可能算出,然后比较那个最大就是那个,也就是所说的枚举法.因此这次我们同样的想到了枚举法.但当我们讨论的时候发现了二维有些麻烦,所以我俩在想有没有什么别的方法,最后我们想到了其实二维数组和一位数组有相似之处,可以先把二维数组变成一维数组在算. 对于imin和imax之间的的每一列,都相当于一个一维的元素,假设数组是BC,那么

结对开发之求任意一个数组的最大子数组

一.题目: 返回一个整数数组中最大子数组的和. 要求: 1.输入一个整形数组,数组里有正数也有负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想. 将接收的数组放到a[i],将接收的数组中的所有子数组的和放到b[i]中,然后找出最大值max,即为该数组的最大子数组和. 将最大值的脚标放到s[i]中,求出 最大子数组的首个数字的脚标s[i],与连续相加数字的个数t[i]. 三.代码. #include

题目:返回一个整数数组中最大子数组的和。(要求程序必须能处理1000 个元素)

1.题目:返回一个整数数组中最大子数组的和. 2.要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 3.设计思路: 将数组大小定义为1000,对于每个元素定义为int32类型,我们取数的时候对其进行了乘4294967296,使数组内的元素可以越界. 4.程序代码: 1 #include <iostream>

返回一个整数数组中最大子数组的和。(二人结对编程)

 题目:返回一个整数数组中最大子数组的和. 要求: 1.要求程序必须能处理1000 个元素: 2.每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况: 3.输入一个整型数组,数组里有正数也有负数. 4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 5.求所有子数组的和的最大值.要求时间复杂度为O(n).  设计思想:(1)将数组大小定义为n,用户输入p的值以确定该数组的长度,对于这n个元素用随机函数进行生成,每个元素定义为int32类型.(2)为

软件工程课程作业(四)--返回一个整数数组中最大子数组的和

伙伴链接:http://www.cnblogs.com/haoying1994/ 一.设计思想 本实验要求输入一个正负数混合的整型数组,长度不限,在此数组的所有子数组中找到和最大的数组,并求出相应数组的和,且时间复杂度为O(n).我们在课堂上共同讨论了多种解决方案,这些将在下面可能的解决方案中展示,在听了同学的思路和老师的讲解之后, 我们最终选取了老师课堂上描述的比较简便的思路.如下: 在输入数组的环节,采用for无限循环加if判断截止,直到触发回车键为止,将数组记录到Array中,数组长度记录

课后实验4--返回一个整数数组中最大子数组的和

伙伴链接:http://www.cnblogs.com/chengqiqin07/ 一.设计思想 本实验要求输入一个正负数混合的整型数组,长度不限,在此数组的所有子数组中找到和最大的数组,并求出相应数组的和,且时间复杂度为O(n).我们在课堂上共同讨论了多种解决方案,这些将在下面可能的解决方案中展示,在听了同学的思路和老师的讲解之后, 我们最终选取了老师课堂上描述的比较简便的思路.如下: 在输入数组的环节,采用for无限循环加if判断截止,直到触发回车键为止,将数组记录到Array中,数组长度记

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

题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二维数组首尾相接,象个一条首尾相接带子一样. 3 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 4 求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思想 目前的解决方案是最笨的方法,穷举,所以时间复杂度达不到题目的要求,还需要进一步的寻找答案 源代码 题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二

返回一个首尾相接的二维整数数组中最大子数组的和

一.题目:返回一个二维整数数组中最大子数组的和. 二.要求: (1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组首尾相接,象个一条首尾相接带子一样. (3)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (4)求所有子数组的和的最大值. 三.解题思路: 将两个同样的数组首尾相接合并成一个数组,在用以前求二维数组最大子数组的方法求解 四.源代码: #include<iostream> using namespace std; #include"math