今天做的笔试的算法题。。。泪目啊

今天做的笔试的算法题。。。泪目啊

又一次被恒生的笔试捏哭。。。T_T||

算法真是头疼。找一个数组的最大和的连续子数组(时间复杂度 O(n)),当时快交卷了,随便一想感觉是找到负数后,再向两边找更多的正数。太2了。不过第一感觉是要不断求和比较,其实在想一下就和答案连接上了。时间不够的伤啊。。。果然直觉是最对的。

这里贴上原帖的正确解法,一看才发现这题只是把原来的查找一个数变成了查找sum而已,嗯,果然脑子锈掉了。。。


下面是转载的一段算法思路(说的有点绕):

由于数组中的元素可能是正负,所以连续的子组求和,会变大也可能变小,解题时首先要求当前的和(初始值为0)和下一个元素求和后,如果是负的,那么重新置0和下下个继续求和,首先要找到使和增加的正的元素。然后有了当前最大的和后,纪录下来;继续累加求和,若新增的元素使和变为负数,那么重新置0,按这个逻辑找出剩余元素的一个最大子组和,若超过前纪录,覆盖,直到子组遍历结束。


public class FindMaxSumOfSubArray {

public static void main(String[] args) {
    FindMaxSumOfSubArray f = new FindMaxSumOfSubArray();
    int[] arr = { 1, -2, 3, 10, -4, 7, 2, -5 };
    System.out.println("MaxSum:" + f.findMaxSum(arr));
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值