1. 程式人生 > >JAVA程式碼—演算法基礎:子陣列的最大累加和問題

JAVA程式碼—演算法基礎:子陣列的最大累加和問題

子陣列的最大累加和問題 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); } } }

(完)