1. 程式人生 > >返回一個首尾相連的整數陣列中最大子陣列的和數

返回一個首尾相連的整數陣列中最大子陣列的和數

設計思路:
只要找到從A[0]開始和最大的一段(A[0]…..A[j])(0 <= j < n)
以及以A[n-1]結尾的和最大的一段(A[i]…..A[n-1])(0 <= i < n)
該種情況的最大值為A[i]+…..+A[n-1]+A[0]+….+A[j]
如果i <= j 則最大值為A[0]+…..+A[n-1](陣列元素全為正則返回0)否則最大值為A[i]+…..+A[n-1]+A[0]+….+A[j]
最後,取兩種情況的最大值就可以了

通俗來說就是先從陣列的第一位找到最後一位求出最大的子陣列的和,然後再從最後一位向前找和是最大的值再加上第一位向後的所有正數。


#include<stdio.h> #include
<iostream> using namespace std; int a[100010]; int main() { int n; while(scanf("%d",&n)!=-1) { int w=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); w
+=a[i]; } int sum=0,sum1=a[0]; for(int i=0;i<n;i++) { if(sum>=0) { sum+=a[i]; }
if(sum<0) { sum=0; } if(sum>sum1) { sum1=sum; } } int sum2=0,sum3=a[0]; for(int i=0;i<n;i++) { if(sum2<=0) { sum2+=a[i]; } if(sum2>0) { sum2=0; } if(sum2<sum3) { sum3=sum2; } } printf("%d\n",max(sum1,w-sum3)); } }

 實驗總結:

        和上課時候講的一樣,找到思路是關鍵,思路找到之後剩下的程式碼都是比較好寫的了,通過這幾次課的練習我在思路方面比以前有了很大的進步,

以前不會寫的程式和看不懂的程式,現在已經能理解一部分了,我相信通過以後的學習我會越來越好的。

 

程式截圖:

結對:id 雷焱(*宇)