输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为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的值 就是迭代下列表取最大值。

时间: 2024-10-06 08:27:16

输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)的相关文章

输入一个整型数组,数组里有正数,也有负数。求所有子数组的和的最大值

题目: 输入一个整型数组,数组里有正数,也有负数. 数组中一个或连续的多个整数组成一个子数组. 求所有子数组的和的最大值.要求时间复杂度为 O(n). 解答: 1 public class Solution { 2 public static void main(String[] args) { 3 int[] arr = {1,-2,3,10,-4,7,2,-5}; 4 System.out.println(maxSub(arr)); 5 } 6 7 private static int ma

二维数组首尾相接,象个一条首尾相接带子一样,求所有子数组和的最大值

题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二维数组首尾相接,象个一条首尾相接带子一样. 3 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 4 求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思想 目前的解决方案是最笨的方法,穷举,所以时间复杂度达不到题目的要求,还需要进一步的寻找答案 源代码 #include<iostream> #include<time.h> #include<

Python算法与数据结构--求所有子数组的和的最大值

Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室?昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 这个题目有多个解法,比如可以用一个二维数组存之前每个数据的和,然后在进行大小比较:但是这样时间负责度就是O(n2)了. 换个思路思考下,因为是要最大数,那么就不需要存储,只需要找最大值就可以了.但是为了找子序列的最大和,在遇到

求所有子数组的和的最大值

1.源代码 package 加减乘除; import java.util.Scanner; public class Max1 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("输入个数:"); int k = in.nextInt(); int[] shu = new int [k];//定义数组 Scanner scanner=new

输入一个整形数组,元素有正有负,一个或者多个连续的元素为其子数组,求所有子数组中和的最大值

public class Zhejiang { public static void main(String[] args) { int[] arr=new int[] {1,-2,3,10,-4,7,2,-5}; int i=getGreatestSum(arr); System.out.println(i); } private static int getGreatestSum(int[] arr) { if (arr==null||arr.length==0) { return 0; }

一个整形数组中最大值求和问题

要求: 1.输入一个整形数组,数组里面有正数也有负数. 2.数组中国连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.求所有子数组的和的最大值.要求时间复杂度为O(n). 当自己看到这个题目的时候,想到了“复杂的问题简单化,一步一步来”,然后在课上老师的引导之下有了自己实现这个功能的方法.最终自己用了两者方法实现功能,但是在第二种方法上花费的时间较多,几乎是第一种方法两倍的时间.下面将两种方法一一解释自己的思路. 一.时间复杂度O(n^2) 本次功能实现简单,一共分为3步,首先是实

软件工程结对开发之求一个或者多个数组中连续最大子数组之和3

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. 同时返回最大子数组的位置. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思想 三.代码 四.截图 五.总结 六.工作合影

3月31号周二课堂练习:结对开发----求二维数组组成的矩阵中子矩阵的最大值二

一.题目要求 1.1输入一个二维整形数组,数组里有正数也有负数. 1.2二维数组首尾相接,象个一条首尾相接带子一样. 1.3数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 1.4求所有子数组的和的最大值.要求时间复杂度为O(n). 二.结对要求 2.1两人结对完成编程任务. 2.2一人主要负责程序分析,代码编程. 2.3一人负责代码复审和代码测试计划. 2.4发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三.设计过程 上次已经算过二维数组中

返回一个整形数组中最大子数组的和

一.要求: 1.要求程序能处理1000个元素 2.每个元素是int32类型的 3.输入一个整形数组,数组里有正数也有负数 4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和 5.求所有子数组的和的最大值.要求时间复杂度为O(n) 二.设计思想 从总左边(a[0])开始遍历整个数组,一直到最右边结束(a[n-1]),在这个过程中记录到目前为止最大的子数组和maxsofar.maxsofar初始化成0.假如我们已经找到a[0]到a[n-1]之间的最大子数组和,那么a[0]到a[i]之