Maximum Subarray -- Leetcode

12.24 2012

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.

class Solution {
public:
    int maxSubArray(int A[], int n) {
        if(n==1) return A[0];
        int ret=INT_MIN;
        int temp=0;
        for(int i=0;i<n;i++){
            temp=max(A[i],temp+A[i]);
            ret=max(temp,ret);
        }
        return ret;
    }
};

总结:

1. 一开始的思路是用递归来实现:把整个array拆分成前半段subarray,讨论后半部分subarray是否对前面的array有正面作用。但是后来发现这么做有点复杂,时间性能差,主要是难以用下标了判断应该如何把前面的没用的子集去掉。后来换了一个思路想,可以考虑用动态规划的思路,考虑前半段子集对后续的求和的影响。

2. 当到这个element时,若前面的子集的和是正数,那么就对后面的求和有积极作用,应该保留,即和该element相加,其实就是求前子集与前子集和该元素的和中的最大值。否则,则前面的子集对后续求和没有作用,则应该以该元素为子集的第一个子集,重新开始进行分析。对比求出之后,与前面的所有可能的最大值相比,返回较大值。

内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格和根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量和指针中的应用规则,解释了不同类型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这类数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序和清理。 阅读建议:由于本资源涉及较多底层概念和技术细节,建议读者先复习C语言基础知识,特别是指针和内存管理部分。在学习过程中,可以尝试动手编写类似的代码片段,以便更好地理解和掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值