zoukankan      html  css  js  c++  java
  • 【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   
  • 相关阅读:
    js dom
    js Number string
    jq ajax数据交互
    js date 和 math
    js中英文网页切换
    日常使用
    php求和
    empty()
    时间戳、日期相互转换
    数组转字符串之间相互转换
  • 原文地址:https://www.cnblogs.com/KingKou/p/4242285.html
Copyright © 2011-2022 走看看