问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

给定一个整数序列,求出子段序列的最大和,也就是一段连续和元素的和,使其和最大,(如果

发布网友 发布时间:2022-04-18 10:56

我来回答

3个回答

懂视网 时间:2022-04-18 15:17

时间复杂度为O(n)

只需要过一遍数组即可,但是需要深入理解这个数组的本质特征,即动态规划的方法。

首先设置两个变量,thisSum和maxSum。其中thisSum表示走到当前位置元素的和;maxSum表示走到当前位置下的连续子序列的最大和。

注意:如果thisSum为负,则直接将其置为0;如果thisSum大于maxSum,则将maxSum置为thisSum的值。

public static int maxSubArray(int[] nums)
 {
 int length = nums.length;
 if(length <= 0)
  return 0;
 int CurSum = 0;
 int max = Integer.MIN_VALUE;
 for(int i = 0; i < length; i++)
 {
  if(CurSum <= 0) //当当前的和小于等于0,那么就给其置为当前元素的值
  CurSum = nums[i];
  else
  CurSum += nums[i];
  if(CurSum > max)
  max = CurSum;
 }
 return max;
 }

推荐教程:PHP教程

热心网友 时间:2022-04-18 12:25

#include <stdio.h>

int MaxSum(int *a,int n) {

int i,sum = 0,max = 0;

bool flag1 = false,flag2 = false;

for(i = 0;i < n;i++) {

if(a[i] > 0) flag1 = 1;

if(a[i] < 0) flag2 = 1;

}

if(flag1 && flag2) { // 序列中有正数,也有负数

for(i = 0;i < n;i++) {

if(a[i] < 0) {

if(max < sum) {

max = sum;

sum = 0;

}

}

else sum += a[i];

}

if(max < sum) max = sum;

}

else if(flag1 && !flag2) { // 全部为正

for(i = 0;i < n;i++) max += a[i];

}

else if(!flag1 && flag2) {

max = a[0];

for(i = 1;i < n;i++) {

if(a[i] > max) max = a[i];

}

}

else max = 0; // 全部为零

return max;

}

int main() {

int a[] = {31,-98,45,77,89,12,-92,88,80,120};

for(int i = 0;i < 10;i++) printf("%d ",a[i]);

printf("\nMAX = %d\n\n",MaxSum(a,10));

return 0;

}

热心网友 时间:2022-04-18 13:43

上面的解答明显不是满足连续和最大的解:如:int a[] = {31,-98,45,77,89,12,-92,88,80,120};是你自己给的例子,那么按照你的算法得出的Max=288;那么45,77,89,12,-92,88,80,120的和是多少呢?显然大于288.(注意这几个数的和45,77,89,12,-92大于零)。下面我给出本人的代码:
#include<stdio.h>
int main(){
int max,sum,n,x;
while(scanf("%d",&n)!=EOF){
sum=0;
max=0;
while(n--){
scanf("%d",&x);
sum+=x;
if(sum>0){//sum大于0
if(sum>max){//sum大于max则sum赋值给max,否则继续加下一个数
max=sum;
}
}
else{//sum<0,置sum为0
sum=0;
}
}
printf("%d\n",max);
}
return 0;
}
如3 2 -7 6 5 -10 3,求其中连续数字最大的和的过程如下:
设两个变量,sum和max。
sum 从前往后做相加运算,如果sum为正,则max和sum比较,取较大的放入max;如果sum小于max,则继续向后加;如果sum小于0,则sum清除为0。对于上述数组,
1.
sum = 3
max = 3

sum = 5
max = 5

sum = -2
max =5 sum = 0

sum = 6
max = 6

sum = 11
max = 11

sum = 1
max = 11

sum = 4
max = 11

则最大数是11
...那么,与人类相伴随的价值又是从何进化而来的呢?

然而,这些生理机制和行为机制的调整,以适应生态元素不足在一定程度上,生物体必然要消耗更多的食物能量,即成本的额外的能量消耗的食物,它可以被翻译成食物中的能量的数量,也就是等于额外消耗的食物能量为负的值的活的生物体的生态元素的缺乏。 当这些生态元素在一定程度上有盈余,生物体可以在一定程度上和一段时间保存...

计算机二级C语言考试总分多少?几分能过?

1、线性表由一组资料元素构成,资料元素的位置只取决于自己的序号,元素之间的相对位置是线性的。线性表是由n(n≥0)个数据元素组成的一个有限序列,表中的每一个数据元素,除了第一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。线性表中资料元素的个数称为线性表的长度。线性表可以为空表。 *:线...

数据结构的问题~

A 一个有限序列,可以为空 B 一个有限序列,不能为空 C 一个无限序列,可以为空 D 一个无限序列,不能为空 2 在一个长度为n的顺序表中,向第iI个元素(1≤i≤n+1)位置插入一个新元素时,需要从后向前依次后移( )个元素。 A n-i B n-i+1 C n-i-1 D i 3 在一个顺序表的表尾插入一个元素的时...

...将网络划分为1000个子网,请写出子网掩码和最大的子网地址?

1000个子网,那么就学要2的10次方1024,也就是说要从主机位中取出10位作为子网位,此时子网掩码的位数就变味8+10=18位,再根据连续1和0,前面18位全为1,后面14位全为0就可以得出子网掩码了255.255.192.0,最大子网就是取出的10位中都为1,即为11.255.192.0 ...

...1&lt;=ai&lt;=32768), 请你从中找出最长的一段连续序列

using namespace std;int main(){ int n,i=0,j=0,num=0,a[100000],cnt=0;long k,f=0;while (cin&gt;&gt;n&gt;&gt;k&amp;&amp;n!=0||k!=0){ for (i = 0; i &lt; n; i++) { cin &gt;&gt; a[i];} for (i = 0; i &lt; n; i++) { num = 0;j=i;f = a[i];while (f&lt;=k&amp;&amp;j+1&lt;n)...

各大公司笔试题及答案

如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。腾讯笔试题:两个整数集合A和B,求其交集两个整数集合A和B,求其...

编写一个函数,输和一行字符,将此字符串中最长的单词输出

5. C语法限制不太严格,程序设计自由度大 虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。 6. C语言允许直接访问物理地址,可以直接对硬件进行操作 因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,...

求数学五年级下册的应用题,越多越好 急!!!

5、一个长方体油桶,底面积是18平方分米,它可装43.2千克油,如果每升油重0.8千克,油桶的高是多少分米? 6、在一只长25厘米,宽20厘米的玻璃缸中,有一块棱长10厘米的正方体铁块,这时水深15厘米,如果把这块铁块从缸中取出来,缸中的水深多少厘米? 7、一个长方体油箱,底面是一个正方形,从里面量边长是6分米。

什么叫有限集合、可列集和可列有限集。看了以下定义,我还不是很懂,请 ...

二,可列与不可列的问题 (1)并不是所有无限集合都和全体自然数,也就是基数为(aleph)零的无限数能构成一一对应。比如,实数。当然全体实数也是无限的,但它却和自然数之间构造不出一一对应关系。所以,在全体实数这个无穷之上,还有更大的无穷。也就是说,(aleph零)&lt;2^(aleph零),我们叫,2^(...

如何在c++定义一个学生类以实现平均成绩的计算和查询功能?

但这个也不能说是中间件的锅,在软件定义汽车大大趋势下,这几乎是必然的。二.常见的基本概念1. AUTOSAR CP 与 AUTOSAR AP在所有的中间件方案中,最著名的非AUTOSAR莫属了。严格地说,AUTOSAR并非特指由某一家软件公司开发出来的某款操作系统或中间件产品,而是由全球的主要汽车生产厂商、零部件供应商、软硬件和...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
迪奥520属于什么颜色 中航飞机起落架有限责任公司 中航飞机起落架燎原分公司有哪些机械? 各机械分别都加工些什么零件? 陕西汉中城固燎原起落架公司怎么样?我是学数控的想进,该怎么办? 中航飞机起落架燎原分公司职工待遇怎么样 ...第一天上班,没有签劳动合同。是挂靠的物流公司,老板不? ...厂里入了货物险,可物流公司却叫我赔偿,说保险是厂里入 离婚的原因有哪些呢 导致离婚的十大原因分别是什么? 离婚的五大原因? 有没有戴帽子的男生头像..最好是像图片那样的 要一头像是一男人用手捂着自己的脸,是半捂的那种,然后是黑白的,男人还带着帽子。 非主流黑白戴帽的QQ头像 有没低调的黑白头像带着帽的,就像这个 请问一下有谁知道哪里有那种戴帽子,遮住脸,黑白色的男头像吗?只有肩膀以上的? 戴着黑色连衣帽子低着头的男生头像非主流一定要低着头的,男生,看不见脸 广告文案策划和营销策划的区别 文案转营销策划 怎么办?谢谢前辈 如何撰写营销策划文案 你对想从事文案和营销策划的新人有什么建议? 整合营销应该遵循哪些原则? 给定一个整数序列,怎么求出子段序列的最大和? 卡其色裙子应该搭配什么样的上衣比较合适? 白色衬衣打底灰卡其色的裙子 搭配什么鞋子好看? 米色上衣配卡其色裙子配什么颜色鞋 qt当中定时器以触发方式接收数据怎么写 555定时器构成单稳态触发器,输出脉冲宽度小于输入触发信号的周期,将... spring定时器触发时,只执行一次 如何实现51单片机触发定时功能? 定时器每隔1秒触发定时器事件的代码怎么写 怎么卸载这个流氓好用记事本软件?,, 谁知道黄金矿工双人的最高记录? 最实在的10项吉尼斯世界纪录 黄金矿工最多能打多少关? 不小心点进别人i贴吧“黄金矿工”922亿亿显摆成绩(听说是毒),有没有事? 有没有这种黄金矿工?就是炸药随便用的 如何在交换机安装和配置网管协议 世界上到底有没有巨人 《黄金矿工》有人通关吗?好像没法通关哎 黄金矿工有多少关.....不懂得就不用回答了;因为我玩到了四十多关还没玩出;;闷死了 4399黄金矿工有好多关 在超市里烤的东西怎么做。。温度要多高?要有什么过程 2018年3月份生产的雷克萨斯ES250可以加装前档玻璃的中置扬声器吗? 黄金矿工可不可以通关 急!雷克萨斯ES350挡风玻璃问题 没有目标分的黄金矿工在哪里找 网管主机如何可以登录交换机进行交换配置 PSP连黄金矿工都不能玩?! 请问有没有人玩黄金矿工玩到尽头的啊 到底一共有几关啊 有没有和网上打的黄金矿工?
  • 焦点

最新推荐

猜你喜欢

热门推荐