求子數組最大和

public class findMaxSubArySum1 {
	public static void main(String[] args) {
		findMaxSubArySum1();
	}

	/*
	 * (迪原)11. 求子數組的最大和 題目: 輸入一個整形數組,數組裏有正數和負數。 數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
	 * 求所有子數組的和的最大值。要求時間複雜度爲O(n)。 例如你輸入的數組爲1,-2,3,10,-4,7,2,-5,和最大的子數組爲3,10,-4,
	 */
	public static void findMaxSubArySum1() {
		int[] num = new int[] { 1, -2, 3, 10, -4, 7, 2, -5 };
		int len = num.length;
		int curSum = 0;
		int maxSum = 0;
		StringBuilder sb=new StringBuilder();
		for (int i = 0; i < len; i++) {
			curSum += num[i];//對數組遍歷,依次相加
			if (curSum < 0) {//如果小於0,重新賦值爲0
				curSum = 0;
			} else if (curSum > maxSum) {
				//sb.append(num[i]);//如果爲正數,賦值給最大值
				maxSum = curSum;
			}

		}
		if (maxSum == 0) {//如果都爲負數,假設數組第一個值爲最大值,依次比較
			maxSum = num[0];
			for (int i = 1; i < len; i++) {
				if (maxSum < num[i]) {
					maxSum = num[i];

				}
			}
		}
		System.out.println(maxSum+" "+sb);
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章