- 论坛徽章:
- 1
|
求一个数组中最大的相邻元素之和
[quote]原帖由 "wangxg2"]不对啊!如果全是负数,比如-2,-3,-1,.....,结果应该是-1,而上面的结果出来只是-2。[/quote 发表:
是有这么个问题
所以sum1不应该是最近>;0的最长序列,而应该是最近最大或和>;0的最长序列
改一下:
- void MaxSum(int *m, int n)
- {
- int i, start=0, end=0, max, sum, start1=0, end1=0, sum1=0;
- sum = max= m[0];
- sum1 = m[0];
- for(i=1; i<n; i++) {
- if(m[i] >; sum1 && sum1 <= 0) {
- start1 = end1 = i;
- sum1 = m[i];
- }
- else {
- sum1 += m[i];
- if(sum1 >; 0) end1 = i;else sum1=m[i];
- }
- if(sum1 >; max) {
- start = start1;
- end = end1;
- max = sum1;
- }
- sum += m[i];
- if(sum >; max) {
- if(end < i-1 ) {
- start = end+2;
- max = sum - max - m[end+1];
- sum = max;
- }
- else
- max = sum;
- end = i;
- }
- }
- printf("start %d, end %d, sum %d\n", start, end, max);
- }
- main()
- {
- int m[10] = {-2,-3,-6,-3,-4,-3,-2,-1,-2,-3};
- MaxSum(m, 10);
- }
复制代码 |
|