LeetCode刷題(14)--最大子序和
阿新 • • 發佈:2021-02-01
題目描述
給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。
示例:
輸入: [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
解題思路
int max(int a[],int n) { int max=INT_MIN; for(int i=0;i<n;i++) { int sum=0; for(int j=i;j<n;j++) { sum+=a[j]; if(sum>max) { max=sum; } } } return max; } int main() { int a[9]={-2,1,-3,4,-1,2,1,-5,4}; cout<<max(a,9)<<endl; return 0; }
結果:
分析:
1.設定預設最大值為最小值。
2.遍歷陣列,計算陣列所有值。
3.記錄最大值。
4.如果有值比最大值還大,就將此值設定為最大值。
5.返回最大值。
步驟:
當i=0時,計算sum=sum+a[0]…sum=sum+a[n-1]
當i=1時,計算sum=sum+a[1]…sum=sum+a[n-1]
…
當i=n-1時,計算sum=sum+a[n-1]
雙層遍歷的目的是,計算陣列所有序列的值。
1.n=0時,先計算sum+a[0],再計算sum+a[0]+…a[n-1]
2.n=1時,先計算sum+a[1],再計算sum+a[1]+…a[n-1]
…
n=n-1.計算sum+a[n-1]