輸入一個整形數組(可能有正數和負數),求數組中連續子數組(最少有一個元素)的最大和。要求時間復雜度為O(n)(解決)


輸入一個整形數組(可能有正數和負數),求數組中連續子數組(最少有一個元素)的最大和。要求時間復雜度為O(n)。


輸入描述:
【重要】第一行為數組的長度N(N>=1)

接下來N行,每行一個數,代表數組的N個元素

輸出描述:
最大和的結果

輸入例子1:
8
1
-2
3
10
-4
7
2
-5

輸出例子1:
18

思路:對輸入的數組進行計算,

 

import java.util.Scanner;

public class Main {

public static void main(String[] args){
  Scanner in = new Scanner(System.in);
  int inputSize = in.nextInt();
  int[] array = new int[inputSize];

  for(int i=0;i<array.length;i++){
  array[i] = in.nextInt();
  }

  System.out.println(findMax(array,array[0]));

}

public static int findMax(int[]array,int maxSum){
  int localSum = 0;//存儲當前的可能是目標子集的元素和
  int inputSize = array.length;
  for(int i =0;i<inputSize;i++){

  if(array[i]>0){//如果當前的元素大於0,則把它的值加入當前目標子集的和
    if(localSum<0){//如果localSum小於0,那么當前的子集必然不會構成目標子集
    localSum=0;
  }
  localSum+=array[i];
  }else {//如果當前的元素小於0,則要判斷localSum是否大於0,如果大於0,則加入當前元素值(因為之后可能仍然有很大的數)
    if(localSum>0){
    localSum+=array[i];

    }else{//如果localSum小於0,說明之前的一些元素有比較大的負數,那么就從當前位置開始重新尋找,
      localSum = array[i];

    }
  }

  if(maxSum < localSum){
  maxSum = localSum;
  }
  }

  return maxSum;
  }

}


免責聲明!

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



猜您在找 輸入一個整形數組,數組里有正數也有負數。 數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。 求所有子數組的和的最大值。要求時間復雜度為O(n) 輸入一個整型數組,數據元素有正數也有負數,求元素組合成連續子數組之和最大的子數組,要求時間復雜度為O(n)。 [java實現]找一個數組的最大和的連續子數組(時間復雜度 O(n)) Leetcode練習(Python):數組類:第53題:給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。進階: 如果你已經實現復雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。 Leetcode練習(Python):數組類:第128題:給定一個未排序的整數數組,找出最長連續序列的長度。 要求算法的時間復雜度為 O(n)。 一個整形數組中有正數也有負數,數組中連續一個或多個組成子數組,每個子數組都有一個和,求所有子數組中和的最大值 給定一個長度為N的數組,找出出現次數大於n/2,n/3的數,要求時間復雜度O(n),空間復雜度O(1) 兩個有序數組合並成一個有序數組(要求時間復雜度為O(n)) Leetcode練習(python):第414題:第三大的數:給定一個非空數組,返回此數組中第三大的數。如果不存在,則返回數組中最大的數。要求算法時間復雜度必須是O(n)。 給定一個整數數組 nums 和一個目標值 k,請實現一個方法判斷 nums 中是否存在某個片段(即若干個相連元素)之和等於 k。要求時間復雜度為 O(n)。
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM