• 【leetcode】Maximum Subarray


      说起这道题,第一反应就是分治算法。正如我在分治算法里写的,分三种情况递归求解,但是由于leetcode给定的参数只有一个数组,这个,貌似不能用递归吧?然后想用非递归的算法实现动态规划,但是貌似也写不出来。搞了大半天,这道题还是没解决。于是我就舍弃了这些所谓的动态规划啊,分治算法啊。用最原始的,自己想的方法去做,下面是我的思路:

      1.这些网站给出的题目一般都是在一次遍历之后就能得到结果的。所以我要只遍历一遍。

      2.最大和子序列,他两边其他的加起来肯定是负的,否则不可能不加进去。对于子序列后面的如果是负,可以不考虑,因为加进去之后肯定小于当前最小值,所以我要考虑的是子序列前面的一些数(如果存在的话)。

      3.对于一个数字,我要做的就是判断,加入这个数字之后:a.现有的和是否为负,如果为负的话,肯定是不考虑 。此时,从0开始重新算合。这里需要两个参数,一个记录全局最大和,一个记录当前和。

      这个方法的关键在于:如果前面的数加起来是负数,就不用考虑这些数。要及时更新为0。

        def maxSubArray(self, A):
            
            max_sum = A[0]    #记录全局最大和
            temp_sum = A[0]  #记录当前和
            for i in range(1,len(A)):  
                temp_sum = max(temp_sum, 0)  #如果前面的值小于0,则完全没必要加这些值,当前和仍为0
                temp_sum += A[i]    #如果之前的数和是负的,则当前最大值就是这个值A[i];否则,当前和要加上这个数字。
                max_sum = max(temp_sum,max_sum)   #全局最大和:把遍历到此处的全局最大值记录下来,这就是为什么最大和子串之后的负值可以不用考虑。
            return max_sum   
  • 相关阅读:
    git回滚分支版本到指定版本
    java的垃圾回收
    java对象模型
    java内存模型
    偏向锁浅析
    maven打包报错:在类路径或引导类路径中找不到程序包 java.lang
    《microsoft sql server 2008技术内幕 t-sql语言基础》
    《SQL基础教程》
    内连接,外链接(左连接、右连接、全连接),交叉连接大总结+附SQL JOINS图解[转]
    《大型网站技术架构》1.大型网站架构演练
  • 原文地址:https://www.cnblogs.com/KingKou/p/4242285.html
Copyright © 2020-2023  润新知