LeetCode 53.最大子序和 动态分配法 C语言 Maximum Subarray

本篇文章为笔者的LeetCode刷题笔记。文章整体分为两部分:1.笔者自己思考的算法及代码。2.LeetCode官方给出的最优算法及代码。通过对比这两部分算法和代码的异同,笔者的算法思想和编程水平有了显著地提升。如果这篇文章能帮到你那真是再好不过了!

一、笔者思考的算法

尴尬。。没思路,直接上官方答案。

二、官方答案

int maxSubArray(int* nums, int numsSize) {
    int premax=0; int resultmax=nums[0];        //pre是从左到右到前一个元素为止在且包含其在内的最大子数组和 按顺序应该依次为-2,1,-2,4...  resultmax是历史上最大数组和的值
    for(int i=0;i<numsSize;i++){
        premax=fmax(nums[i],premax+nums[i]);  //与前一个元素的pre相加,再和自己比较取最大
        resultmax=fmax(premax,resultmax);
    }
    return resultmax;
}

时间复杂度

时间复杂度:O(n),其中 n 为nums 数组的长度。我们只需要遍历一遍数组即可求得答案。
空间复杂度:O(1),我们只需要常数空间存放若干变量。

分治算法有空补充。

三、笔者小结

c语言的fmax()函数的功能为比较两个浮点数大小并返回大者。

http://www.360doc.com/content/21/0301/11/54508727_964550537.shtml

Keep calm and carry on!

谢谢你看到这里!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值