Chinaunix首页 | 论坛 | 博客
  • 博客访问: 506207
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-21 13:40
个人简介

技术改变命运

文章分类

全部博文(184)

文章存档

2020年(16)

2017年(12)

2016年(156)

我的朋友

分类: C/C++

2016-07-06 15:10:19

问题描述:
给定一个字数组,数组里可能有整数,负数和零,数组中连续的一个或多个整数组成一个子数组,每个字数组都有一个和,求所有字数组和的最大值
思路;
新建一个变量currsum表示当前字数组的和,若小于0,则令currsum = 下一个元素
c代码如下:

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int findMaxSum(int *a,int n)
  4. {
  5.     int maxSum = a[0];
  6.     int currsum = 0;
  7.     int i = 0;
  8.     for (i = 0;i < n;i++)
  9.     {
  10.         //currsum += a[i];
  11.         if (currsum < 0)
  12.         {
  13.         //    i = i+1;
  14.             currsum = a[i];
  15.         }
  16.         else
  17.         {
  18.             
  19.             currsum += a[i];
  20.         //    i = i+1;
  21.         }
  22.         if (currsum > maxSum)
  23.             maxSum = currsum;
  24.     }
  25.     return maxSum;
  26. }
  27. int main()
  28. {
  29.     int a[8] = {-2,-1,-3,-5,-6,-7,-4,-8};
  30.     int max = findMaxSum(a,8);
  31.     printf("%d\n",max);
  32.     return 0;
  33. }
运行结果如下(返回最大的负数)
[root@localhost ~]# ./a.out
-1
[root@localhost ~]# 
如果要求出最大字数组的和,但不要求字数组是连续的
思路:跳过负数即可(有整数,有负数,有0)
全是负数的情况需要返回最大负数
c代码如下

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int whetherNegtive(int *a,int n)//判断数组是否全为负数
  4. {
  5.     int i = 0;
  6.     for (i = 0;i < n;i++)
  7.         if(a[i] >= 0)
  8.             return 0;
  9.     return 1;
  10. }
  11. int findMaxSum(int *a,int n)
  12. {
  13.     int maxSum = a[0];
  14.     int currsum = 0;
  15.     int i = 0;
  16.     for (i = 0;i < n;i++)
  17.     {
  18.         //currsum += a[i];
  19.         if (a[i] >= 0)
  20.         {
  21.             currsum += a[i];
  22.         }
  23.         else
  24.         {
  25.             if (whetherNegtive(a,n))
  26.                 currsum = a[i];
  27.         }
  28.         if (currsum > maxSum)
  29.             maxSum = currsum;
  30.     }
  31.     return maxSum;
  32. }
  33. int main()
  34. {
  35.     int a[8] = {-2,-3,-1,-4,-5,-6,-7,-8};
  36.     int max = findMaxSum(a,8);
  37.     printf("%d\n",max);
  38.     return 0;
  39. }
运行结果如下:
[root@localhost ~]# ./a.out
-1
[root@localhost ~]# 

阅读(632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~