針對PTA上算法第三章實踐中的第一題進行分析ios
實踐題目:算法
算法第三章上機實踐報告編程
問題描述:數組


算法分析:函數
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n;
cin>>n;
int a[101][101];
int sum[101][101];
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
sum[n][i] = a[n][i];
}
for(int i=n;i>0;i--){
for(int j=1;j<=i;j++){
if(sum[i][j]>=sum[i][j+1]){
sum[i-1][j] = a[i-1][j] + sum[i][j];
}
else{
sum[i-1][j] = a[i-1][j] + sum[i][j+1];
}
}
}
cout<<sum[1][1];
}
時間、空間複雜度分析:
時間複雜度爲O(n^2),由於排序時所用的是二重循環,故而時間複雜度爲O(n^2)。spa
空間複雜度爲O(1),由於在主函數中給變量分配的空間是常數,因此空間複雜度爲O(1)。blog
心得體會:排序
先分析了一會題目,打算採用從下至上,定義另外一個二維數組,先將三角形最底層的各數值存進數組的第n行,而後經過兩兩比較,大的一方與上一行的數值相加後存進上一行的一維數組中,不斷循環下去,第一行的數值sum[1][1]即爲最大路徑的值。ci
略有欠缺的是在二維數組循環的時候,最早是由i=0開始的,致使後面有些判斷、將最後一行的數值複製都出現了小小的錯誤,於是無法得出正確答案。後來不斷修改,才知道從i=1更容易理解和編程。io
挺喜歡上機打題和結對編程的,能夠不斷交流,不斷髮現還有哪些地方不足,而後一步一步修改,直到算法最優,提交成功。