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 + nums[i]。

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;
}
相关推荐
吃好睡好便好8 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅8 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue10 小时前
三角形数
笔记·算法·数论·组合数学
Mr. zhihao11 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
念何架构之路11 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星11 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑11 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光12 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩12 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_6294947313 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表