輸入一個整型數組,數據元素有正數也有負數,求元素組合成連續子數組之和最大的子數組,要求時間復雜度為O(n)。


  如果不考慮時間復雜度,我們可以枚舉出所有子數組並求出他們的和。不過非常遺憾的是,由於長度為n的數組有O(n2)個子數組(即:n + n-1 + ... + 1=n(n+1)/2);而且求一個長度為n的數組的和的時間復雜度為O(n)。因此這種思路的時間是O(n3)。

  上邊這句話不是原創。

  我承認腦子比較笨,只把仨for嵌套的做出來了,時間復雜度為O(n)的,真的想不通,想了好久,好久,直到最后從網上搜到了這道題,才發現原來這道題真的挺難的,可這道題又非常簡單,也就二三十行的代碼。

代碼:

package shuzu;

import java.util.Random;
import java.util.Scanner;

public class shuzu {

public static void main(String[] args) {
// TODO Auto-generated method stub
int a[];
int i,g,b=0,c=0;
Scanner scanner = new Scanner(System.in);
System.out.print("輸出隨機產生的數組的長度:");
g=scanner.nextInt();
a=new int[g];
scanner.close();

for(i=0;i<g;i++)
{
Random random = new Random();
a[i]=random.nextInt(19);
a[i]=a[i]-9;
System.out.print(a[i]);
System.out.print(" ");
}System.out.println(" ");
for(i=0;i<g;i++)
{b=b+a[i];
if(b<0)
b=0;
if(b>c)
c=b;
System.out.print(b);
System.out.print(" ");
}
if(c==0)
{c=a[0];
for(i=0;i<g;i++)
if(a[i]>c)
c=a[i];}
System.out.println("");
System.out.print(c);
}

}

  程序思路也比較簡單,從第一位開始累加,當累加和小於零時,設置為零,從下一位開始繼續累加。並記錄所有的累加和,取最大。如果最大和為零說明所有數均為負,直接取數組中的最大值做最大和。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 輸入一個整形數組(可能有正數和負數),求數組中連續子數組(最少有一個元素)的最大和。要求時間復雜度為O(n)(解決) 輸入一個整形數組,數組里有正數也有負數。 數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。 求所有子數組的和的最大值。要求時間復雜度為O(n) 輸入一個整型數組,數組里有正數,也有負數。求所有子數組的和的最大值 [java實現]找一個數組的最大和的連續子數組(時間復雜度 O(n)) 兩個有序數組合並成一個有序數組(要求時間復雜度為O(n)) 給定一個無序的整數類型數組,求最長的連續元素序列的長度。 例如: 給出的數組為[100, 4, 200, 1, 3, 2], 最長的連續元素序列為[1, 2, 3, 4]. 返回這個序列的長度:4 你需要給出時間復雜度在O(n)之內的算法 給定一個整數數組 nums 和一個目標值 k,請實現一個方法判斷 nums 中是否存在某個片段(即若干個相連元素)之和等於 k。要求時間復雜度為 O(n)。 Leetcode練習(Python):數組類:第128題:給定一個未排序的整數數組,找出最長連續序列的長度。 要求算法的時間復雜度為 O(n)。 給定一個長度為N的數組,找出出現次數大於n/2,n/3的數,要求時間復雜度O(n),空間復雜度O(1) 一個整形數組中有正數也有負數,數組中連續一個或多個組成子數組,每個子數組都有一個和,求所有子數組中和的最大值
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM