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);
}
}
求子數組最大和
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.