這道題在陳越姥姥的資料結構課中出現了,姥姥提出了四種解法。第一種是暴力的方法,即求出每個子串行和的大小,進行比較。第二種是在第一種的方法上稍加優化,減少累加次數。
第三種演算法叫「分而治之」,把乙個陣列一分為二,一直分下去,直到左右兩端各乙個元素。此時求出左端子序列的最大值,求出右端子序列的最大值,再求出跨越左右兩端子串行的最大值。三個最大值中最大的那乙個,才是這個區間內子串行和的最大值,大於零將其返回,否則返回0。最終是分成單個元素的,同理返回即可。這裡用到的遞迴的演算法,是我自己寫的,可能不夠簡潔,不過還是能夠通過測試點的。其複雜度為o(nlogn)。
#includeusing namespace std;
int getmax(int a, int b);
int fun(int a, int b);
int k, array[100000];
int main()
maxsum = fun(0, k - 1);
printf("%d", maxsum);
}int fun(int a, int b)
} for(int i = (a + b) / 2 + 1; i <= b; i++)
} tempc = leftmax + rightmax;
max = getmax(tempa, tempb);
max = getmax(tempc, max);
}else
if(max > 0) return max;
else return 0;
}int getmax(int a, int b)
#includeusing namespace std;
int main()
for(int i = 0; i < k; i++)else if(thissum < 0)
} printf("%d", maxsum);
}
7 1 最大子列和問題
給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 與樣例等價,...
7 1 最大子列和問題
7 1 最大子列和問題 20 分 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試...
7 1 最大子列和問題
題目如下 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 輸入第1行...