本篇文章为笔者的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!
谢谢你看到这里!