首页 > 代码库 > 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)
群里看到这道题,用python做了做,
def find(array): v_sum = greatest = 0 for a in array: v_sum += a v_sum = 0 if v_sum < 0 else v_sum greatest = v_sum if v_sum > greatest else greatest if v_sum == 0: greatest = array[0] for a in array: greatest = a if greatest < a else greatest print greatest arr1 = [1, 2, -4, 3, 3] find(arr1)
思路:从左到右递加, 如果v_sum为正,可以继续加到后面的元素上,
如果v_sum已经为负,就需要将原有的v_sum清为0, 如果v_sum清0了 跟greatest 就不是一一同步的,
最后比较greatest和v_sum取大值,需要注意的是 如果列表全是负值, 那么greatest的值 就是迭代下列表取最大值。
输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。