day26 求一段连续子数组之和的最大值

题目描述

方法一:超出时间限制

思路:选一个起点,选一个终点,计算起点到终点的和;求max;

起点几种可能:0 到 size -1;

终点: 起点 到 size -1;

c 复制代码
int maxSubArray(int* nums, int numsSize){
    int maxSum, tempSum, i, j, k;
    maxSum = -101;
    for(i = 0;  i < numsSize; i++){
        for(j = i; j < numsSize; j++){
            tempSum = 0;
            for(k = i; k <= j; k++){
                tempSum += nums[k];
            } 
            if(tempSum > maxSum)
                maxSum = tempSum;
        }
    }
    return maxSum;
}

方法二:贪心算法

依次遍历数组的每个元素,并记录前面i - 1个元素的最大和preSum,若preSum < 0, 则从当前元素重新开始计算;若 preSum > 0,则当前最大和为preSum + numsi

c 复制代码
int maxSubArray(int* nums, int numsSize){
    if((nums == NULL) || (numsSize == 0))
        return 0;

    int maxRes = nums[0];
    int preSum = nums[0];

    for (int i = 1; i < numsSize; i++)
    {
        if (preSum < 0) {
            preSum = nums[i];
        } else {
            preSum += nums[i];
        }
        if (preSum > maxRes){
            maxRes = preSum;
        }     
    }
    return maxRes;
}
c 复制代码
int maxSubArray(int* nums, int numsSize){
   int result = INT_MIN;
   int count = 0;
   for (int i = 0;i < numsSize;i++){
       count += nums[i];
       if (count > result) {
           result = count;
       }

       if (count < 0) {
           count = 0;
       }
   }
   return result;
}
相关推荐
先吃饱再说11 小时前
判断回文字符串,从一行代码到双指针优化
算法
黄敬峰14 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术15 小时前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六19 小时前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程
胡萝卜术19 小时前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
Asize20 小时前
初识DFS 与 BFS:递归、队列与图遍历
算法
罗西的思考1 天前
机器人 / 强化学习】HIL-SERL:人类在环驱动的具身智能进化框架
人工智能·算法·机器学习
CSharp精选营1 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
美团技术团队2 天前
LongCat 开源 VitaBench 2.0:长期动态智能体基准新标杆
人工智能·算法