最大子段和四種求法

2021-08-09 12:23:38 字數 833 閱讀 4284

給定n(1<=n<=100000)個整數(可能為負數)組成的序列a[1],a[2],a[3],…,a[n],求該序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。當所給的整數均為負數時定義子段和為0,依此定義,所求的最優值為: max,1<=i<=j<=n。 例如,當(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)時,最大子段和為20.

第一種 暴力求解 最費時 時間複雜度o(n^3)

int maxsum(int a,int n)

}return maxsum;

}

第二種 在第一種上的改進版 時間複雜度o(n^2)

int maxsum(int a,int n)

}return maxsum;

}

第三種 分而治之 遞迴思想

將陣列一分為二,左邊右邊,整個陣列最大的和可能是左半邊最大和 也可能是右半邊最大和 還有可能是跨越邊界最大和 , 分別求出來 ,在比較大小。時間複雜度o(nlogn)

int max(int a,int left,int right)

sum = 0;

right_max = 0;

for(i= center+1;i<=right;i++)

ret = left_max+right_max;

if(ret if(retreturn ret;

}

int max(int a,int n)

return maxsum;

}

最大子段和四種求法

給定n 1 n 100000 個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整數均為負數時定義子段和為0,依此定義,所求的最優值為 max,1 i j n。例如,當 a 1 a 2 a 3 a 4 a 5 a 6 2,1...

最大子陣列和四種實現

暴力列舉 暴力列舉的方式 時間複雜度o n 3 param array 輸入 return 最大子陣列的和的值 public static intforcemaxsubarray int array if sum maxvalue return maxvalue 優化的暴力列舉 優化的暴力列舉 時間...

最大子串行和的四種演算法

1.窮舉法 演算法思想 算出每個子串行的和,即算出序列中第i個到第j個數的和 j i 並進行比較 演算法 public static int maxsubsum1 int a if sum maxsum return maxsum 執行時間為o n 3 2.對上述第乙個演算法的改進 演算法思想 第乙...