zoukankan      html  css  js  c++  java
  • 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)

    群里看到这道题,用python做了做, 

    
    
    # coding: utf-8


    def find(arr):
    v_sum, greatest = 0, 0
    for a in arr:
    v_sum += a
    v_sum = 0 if v_sum < 0 else v_sum
    greatest = v_sum if v_sum > greatest else greatest

    if greatest == 0:
    greatest = arr[0]
    for a in arr:
    greatest = a if greatest < a else greatest

    print greatest


    if __name__ == "__main__":
    arr1 = [7, 5, -2, -1, -20]
    find(arr1)
     
     

    思路:从左到右递加, 如果v_sum为正,可以继续加到后面的元素上,

    如果v_sum已经为负,就需要将原有的v_sum清为0, 如果v_sum清0了 跟greatest 就不是一一同步的,

    最后比较greatest和v_sum取大值,需要注意的是 如果列表全是负值, 那么greatest的值 就是迭代下列表取最大值。

  • 相关阅读:
    动态内存有那几个?
    Swift的可选的和可选链
    结构的声明
    指针的理解
    类的初始化分析要点代码
    Swift属性的理解和代码
    swift基本类型
    Swift的下标代码
    Swift枚举代码
    mysql 修改编码格式
  • 原文地址:https://www.cnblogs.com/becker/p/5966391.html
Copyright © 2011-2022 走看看