题目描述:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和 。
解法1 两层for循环…以下是代码
#include <stdio.h>
#include <stdlib.h>
int solution(int m, int arr[]){
int result = 0;
int i = 0;
int nResTmp = 0;
while(i < m)
{
result = 0;
for(int j = i; j < m; ++j)
{
result += arr[j];
if(nResTmp < result)
{
nResTmp = result;
}
}
i++;
}
result = nResTmp;
return result;
}
int main() {
int n = 9;
int arr = {-2,1,-3,4,-1,2,1,-5,4};
int result = solution(n, &arr);
printf("%d", result);
return 0;
}
解法2 一层for循环…以下是代码
int solution(int m, int arr[]){
int curSum=0;
int maxSum=0;
for(int i = 0 ;i < m; i++)
{
// 如果当前和小于等于0,那么舍弃掉它,从数组中的当前项开始累加
if(curSum <= 0)
{
curSum = arr[i];
}else // 否则当前和需要加上数组中的当前的项
{
curSum += arr[i];
}
// 每次计算后需要更新最大和
if(curSum > maxSum)
maxSum = curSum;
}
}
输入示例
输出结果
6