题目描述:

给定一个整数数组 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;
	}
}
输入示例

求某一数组内连续子数组的最大和_leetcode

输出结果
6