JAVA程式碼—演算法基礎:子陣列的最大累加和問題
阿新 • • 發佈:2019-01-23
子陣列的最大累加和問題 JAVA程式碼實現
【問題描述】
給定一個一維陣列,返回子陣列的最大累加和。
例如,arraydemo=[1,-2,3,5,-2,6,-1];所有子陣列中,[3,5,-2,6]可以累加出最大的和12,所以返回12。
【要求】
如果 arraydemo長度為N,要求時間複雜度為O(N),額外空間複雜度為O(1)
JAVA程式碼實現如下:
package com.bean.algorithmexec;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class SubArraySumDemo {
/*
* 給定一個一維陣列,返回子陣列的最大累加和。
* 例如,arraydemo=[1,-2,3,5,-2,6,-1];所有子陣列中,[3,5,-2,6]可以累加出最大的和12,所以返回12。
*/
static int T, Answer;
static Scanner sc;
/*
* 演算法函式
* */
public static int maxSum(int[] arraydemo) {
if (arraydemo == null || arraydemo.length == 0) {
return 0;
}
int max = Integer.MIN_VALUE;
int current = 0;
for (int i = 0; i != arraydemo.length; i++) {
current += arraydemo[i];
max = Math.max(max, current);
current = current < 0 ? 0 : current;
}
return max;
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
System.setIn(new FileInputStream("G:\\arraydemo.txt"));
sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String target = sc.nextLine();
String[] tempStringArray = target.split(" ");
int length = tempStringArray.length;
int demo[] = new int[length];
for (int i = 0; i < length; i++) {
demo[i] = Integer.parseInt(tempStringArray[i]);
// System.out.print("demo[" + i + "]= " + demo[i] + " ");
}
// System.out.println();
// 呼叫maxSum方法
Answer = maxSum(demo);
System.out.println("Answer = " + Answer);
}
}
}
(完)