数组中球子数组和最大的问题(结对开发)

 1 //作者:王炳午  董龙洋  日期:2015.3.17
 2 #include<iostream.h>
 3 #include<stdlib.h>
 4 #include<time.h>
 5 int main()
 6 {
 7     cout<<"---------------------求数组中子数组和的最大值的小程序----------------------"<<endl;
 8     cout<<endl;
 9     int a[10];
10     int i;
11     srand( (unsigned)time( NULL ) );//随机数种子为当前计算机时间。
12     cout<<"得到的一组随机整数(10个数)如下:"<<endl;
13     for(i=0;i<10;i++)
14     {
15         a[i] = rand()%21-10; //随机生成-10 到 10的整数
16     }
17     for(i=0;i<10;i++)
18     {
19         cout<<a[i]<<"      ";
20     }
21     cout<<endl;
22     int sum=0;
23     int GreateSum=0;
24     for ( i=0;i<10;i++)
25     {
26         sum+=a[i];
27         if (sum<0)
28         {
29             sum=0;
30         }
31         if (sum>GreateSum)
32         {
33             GreateSum=sum;
34         }
35     }
36     if (GreateSum==0)
37     {
38         for (int i=0;i<10;i++)
39         {
40             if (GreateSum==0)
41             {
42                 GreateSum=a[i];
43             }
44             else
45             if (GreateSum<a[i])
46             {
47                 GreateSum=a[i];
48             }
49         }
50     }
51     cout<<"最大值sum:"<<GreateSum<<endl;
52     system("pause");
53     return 0;
54 }  

感想:两人一起去构思一起去想算法,本题最难的是算法的构思,开始时我和我的小伙伴都没有注意时间复杂度只能为n,于是我充当领航员的角色,合作下主要是由他书写代码和细节类的书写,完成了一个代码,可是后来发现时间复杂度为n*n。接着我两就想法简化时间复杂度,利用DP算法构思出了程序,在原来的一些基础上,共同完成了本次任务,我觉得两人结对,会使发现错误的几率大大增加,特别是一些算法上的问题,对代码的完成速度和质量都有很大的好处。以下是我和小伙伴的合照(左边是我,右边是我的小伙伴)

时间: 2024-10-19 05:26:06

数组中球子数组和最大的问题(结对开发)的相关文章

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)(解决)

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和.要求时间复杂度为O(n). 输入描述: [重要]第一行为数组的长度N(N>=1) 接下来N行,每行一个数,代表数组的N个元素 输出描述: 最大和的结果 输入例子1: 8 1 -2 3 10 -4 7 2 -5 输出例子1: 18 思路:对输入的数组进行计算, import java.util.Scanner; public class Main { public static void main(String[]

求数组中连续子数组的最大和

问题: 求解数组中连续一段子数组和的最大值.例如:{31,-41,59,26,-53,58,97,-93,-23,84},最大值为59+26-53+58+97=187 思路: 计算出任意i到j之间连续子数组的和再比较必然能得到最大值,但时间复杂度为O(n^2),我们希望能找出线性时间的算法. 我们注意到,假如数组中全为正数,那么最大和必然为全部数相加:如果数组中有负数,并且如果加上某个负数,子数组的和小于0,则最大和子数组必然不包含这个负数. 基于此,给出以下代码: //计算数组中任何连续子数组

二维数组中按子数组首个元素值去重

后台更新了算法,用来挖掘数据,前台(我)配合后台搭建了新页面,历时两周,从 0 到 现在的联调完毕,呼呼,有累,但更多的是完成工作后的喜悦. 废话不多说,联调过程中遇到一个接口需要传输二维数组,是关于选择句子,然后将文档号和句子号拼接成数组,再压入大数组来向后台发送要保存的数据的. 而前台在存储时,选择的句子会直接存储其所属文档号,这样底层存储的数组就会变成对象数组: arr = [ {name:***,docNum:0,lineNum:3}, {name:***,docNum:2,lineNu

一个数组中连续子数组的最大和

//连续子数组的最大和     //{ 1, -2, 3, 10, -4, 7, 2, -5 };//最大子数组18     #include<iostream>     using namespace std;     bool g_InValid = false;     int FindGreatSumOfSubArray(int* arr, int size)     {     if (arr == NULL || size <= 0)     g_InValid = true

返回一个随机数组中的子数组中的数相加最大的和(二)

设计思想: 随机生成数组(含有正数与负数). 求所有子数组:按数组长度进行数组的划分(因为要求数组是连续的). 计算:从第一个数开始做加法,若和大于第二个数,则继续加下一个数(若加上第三个数的和大于第三个数,则重复进行此操作:小于第三个数,则舍掉前面所有数,并继续就重复进行此操作):若小于第二个数,则舍掉第一个数. 实现代码: #include <iostream> #include<time.h> using namespace std; int maxSum(int* a, i

Task 4 求数组的连续子数组的最大和(团队合作)

小组成员:李敏.刘子晗 1.设计思想:由于已经做过这个题目,只要对之前的程序加上相应的测试和约束即可.我们两个人一起商议后,决定了程序的主框架和并列出了最终可以实现的功能.先要定义数组长度和上下限的变量,然后通过if语句对用户所给出的长度和数值进行判断看是否合法,如果不合法要重新输入.最后再加上之前求和的相应代码即可. 2.出现的问题:我们达成协议后,李敏负责编程,我负责测试.开始写程序,在写判断数值是否满足int整型范围的时候出现了错误,我在测试的时候发现她把小于号错写成了大于号,然后加以改正

【算法30】从数组中选择k组长度为m的子数组,要求其和最小

原题链接:codeforce 267 Div2 C 问题描述: 给定长度为n的数组a[],从中选择k个长度为m的子数组,要求和最大. 形式描述为:选择$k$个子数组[$l_1$, $r_1$], [$l_2$, $r_2$], ..., [$l_k$l1, $r_k$] (1 ≤ $l_1$ ≤$r_1$ ≤$l_2$ ≤ $r_2$ ≤... ≤$l_k$ ≤ $r_k$ ≤ n; $r_i-r_i+1$), 使得$\sum_{i=1}^{k}\sum_{j=l_i}^{r_i}p_j$ 问题

关于求已知整数数组的连续子数组的最大和的方法

日期:2019.3.9 博客期:039 星期六 这次的标题就是题目——关于求已知整数数组的连续子数组的最大和的方法,打个比方:给予数组 { 1 , -2 , 3 , -1 , 0 , 2 } ,它的连续子数组的最大和就是取得 { 3 , -1 , 0 , 2 } 时的和 4 !就是说我们需要找到元素值和最大的子数组.我们大可以考虑几种方法: (1)先求出所有的子数组,再找出每一组的和,求出和的最大值 >>>>>>>(优化)>>>>>&

lintcode循环数组之连续子数组求和

v 题目:连续子数组求和 II 给定一个整数循环数组(头尾相接),请找出一个连续的子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.如果多个答案,请返回其中任意一个. v 样例 给定 [3, 1, -100, -3, 4], 返回 [4,0]. v 思路 1.如果不是循环数组,求解连续子区间和的思路如下: 首先设一个累加变量和sum和最大值变量maxN,[ld, rd]表示当前正在累加的区间,[lt,rt]表示最大和的区间.从左边开始一直累加,并初始当前区间[ld