1. 程式人生 > 其它 >LeetCode刷題(14)--最大子序和

LeetCode刷題(14)--最大子序和

技術標籤:刷題!!!leetcode演算法

題目描述

給定一個整數陣列 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]