從今天開始呢,我們就正式開始數據結構的學習了,可以說,這是計算機專業中最為核心的一門課程,也是最為重要的一塊內容。
這一部分,是企業招聘時最為看重的一部分,也是大家解決演算法實現邏輯最為重要的一部分,更是幫助大家找到一份好工作的重要籌碼。
我們今天的這道題呢,就是解決「最大子列和問題」。
給定K個整數組成的序列{N1,N2,…,NK},「連續子列」被定義為{Ni,Ni+1,…,Nj},其中1<=i<j<K,而「最大子列和」則是找到一個所有連續子列元素的和中的最大值。
比方說給定一組序列為{-2,11,-4,13,-5,-2},其中連續子序列{11,-4,13}則是最大值為20。
那麼最終列印輸出的結果則為20。

梳理邏輯
對於函數題,特別是解決數據結構與演算法題的時候,一定要靜下心來,然後梳理清楚題目的邏輯,當然了,現在不太會也很正常,完全可以慢慢來,但是如果要找工作的話,那可得加把勁了。
1、輸入第一行給出正整數K(<=100000),用到一個scanf函數來輸入。
2、第二行給出K個整數,因為我們是一個序列,所以用到的是數組。
3、最麻煩的則是找出最大和的子序列,我們可以這樣來理解:
先從數組中的第一個元素開始加起,找到包含第一個元素的所有子序列的和,並比較大小。
然後找出最大值的和,記錄下來。
與此同時,下一次循環遍歷的時候就把這個和清零,但是最大值不變。
依次繼續求和,並與最大值比較大小,記錄下相對較大的那個值。
在所有循環都結束後,最終的那個最大值則是我們要求的最大值。

代碼實現
//最大子列和問題
#include<stdio.h>
int main(){
int K;//給出正整數K
int M[100000];//給出K個整數
int count;//計數法
int SUM = 0;//遍歷求和
int MAX = 0;//初始的最大值為0
scanf("%d", &K);
for(int i=0;i<K;i++){
scanf("%d",&M[i]);
if(M[i]<0){
count++;
}
}
if(count==K){//所有的數都是0的情況下
printf("0");
}
for(int i = 0; i < K; i++){
//從元素1開始
SUM = 0;//每次循環求和的時候,求和都要變為0才行
for(int j = i; j < K; j++){
SUM = SUM + M[j];
if(SUM > MAX){
MAX = SUM;
}
}
}
printf("%d",MAX);
}
結果測試


總結
這道數據結構題,可以說是數據結構章節中最為簡單的一道題目了,有難度的還在後面呢,我研究生快畢業了,也知道自己得快速提升實力了,秋招末班車以及春招開啟,一定要趕上,沖!!!
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/203851.html