zoukankan      html  css  js  c++  java
  • Python编程题20--最大子序和

    题目

    给定一个非空整数列表 nums ,找到一个具有最大和的连续子列表(子列表最少包含一个元素),返回其最大和。

    例如:

    给定一个列表:[-2, 1, -3, 4, -1, 2, 1, -5, 4],返回结果:6

    给定一个列表:[-1],返回结果:-1

    实现思路1

    • 直接暴力破解,但是需进行2层遍历
    • 第一层遍历设置当前子列表的起始位置 i,第二层遍历设置当前连续子列表的结束位置 j
    • 每次遍历时寻找出遍历到当前位置的最大子序和 res

    代码实现

    def maxSubArray(nums):
        res = nums[0]
        for i in range(len(nums)):
            sum = 0
            for j in range(i, len(nums)):
                sum += nums[j]
                res = sum if res < sum else res
        return res
    

    实现思路2

    • 只进行一层遍历,需设置 res 表示遍历到当前位置的最大子序和,sum表示当前连续子列表的元素之和
    • 遍历时候,如果sum小于0,那么针对后面计算 sum + i < 0 + i,所以就可以把前面元素都丢掉,即sum=0,然后从下一元素开始重新计算sum

    代码实现

    def maxSubArray(nums):
        res, sum = nums[0], 0
        for i in nums:
            sum += i
            res = sum if res < sum else res
            sum = 0 if sum < 0 else sum
        return res
    
    作者:wintest
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面明显位置给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    JS调试工具
    什么是Web Service?
    win7怎么安装消息队列 MSMQ
    死锁产生的原因及四个必要条件
    项目管理模式之如何去除SVN标记
    AJAX中的请求方式以及同步异步的区别
    敏捷软件开发模型--SCRUM
    堆和栈
    UI产品设计流程中的14个要点
    Android中dp和px之间进行转换
  • 原文地址:https://www.cnblogs.com/wintest/p/15449666.html
Copyright © 2011-2022 走看看