題目:
#include using namespace std;
int maxsubseqsum2(int a, int n);
int maxsubseqsum3(int a, int left, int right); //(陣列名,元素左起0,元素終點n-1)
int maxsubseqsum4(int a, int n); //(陣列名, 元素個數)
int main()
// int maxsum = maxsubseqsum4(numseq, n);
int maxsum = maxsubseqsum3(numseq, 0, n-1);
if(maxsum< 0)
coutmaxsum = thissum; //則更新結果
} //j迴圈結束
} //i迴圈結束
return maxsum;
}int comparethreenums(int a, int b, int c)
// 演算法3 分而治之
int maxsubseqsum3(int a, int left, int right)
//list不只乙個元素,二分+治之 遞迴,獲得左右最大
int middle = (left + right) / 2;
leftmax = maxsubseqsum3(a, left, middle);
rightmax = maxsubseqsum3(a, middle+1, right);
//尋找跨越邊界的最大
// int templeftmax, leftbordermax = 0; //未顯式賦值,造成錯誤假內容
// int temprightmax, rightbordermax = 0;
int templeftmax = 0, leftbordermax = 0;
for (int i = middle; i >= left; i--)
} int temprightmax = 0, rightbordermax = 0;
for (int i = middle+1; i <= right; i++)
} int middlemax = rightbordermax + leftbordermax;
int maxsum = comparethreenums(middlemax, leftmax, rightmax);
return maxsum;
}int maxsubseqsum4(int a, int n) else if (thissum < 0)
} //此題裡,不需要記錄最大和的具體項,發現新最大立刻更新,當前和已經小於0時,則加後面的大項必然可以大過加已有的負數
return maxsum;
}
資料結構 PAT 01 複雜度1 最大子列和問題
01 複雜度1 最大子列和問題給定k 個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入第1行給出正整數k 100 000 第2行給出 k個整數,...
PTA 資料結構 01 複雜度1 最大子列和問題
給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 與樣例等價,...
1資料結構 複雜度問題
p3 03 資料結構與演算法概述 演算法 p4 04 演算法分析 時間複雜度分析1 2 事前分析估算方法 3 在研究演算法的效率時,我們只考慮核心 的執行次數,這樣可以簡化分析。p5 05 06演算法分析 時間複雜度分析2 3 p7 07 演算法分析 時間複雜度分析4 p808 演算法分析 時間複雜...