這兩天開始了數據結構和算法的學習,簡單總結一下本身的心得。算法
單段代碼取高頻:例如循環數組
多段代碼取最大:錄入一段代碼中有單循環和多重循環,取多重循環的複雜度數據結構
嵌套代碼算乘積:例如多重嵌套 for 循環數據結構和算法
多個規模算其和:例如方法中兩段代碼單獨運算,最後結果根據這兩段代碼得出,那麼取這二者複雜度的和性能
注: 最後兩個時間複雜度不經常使用,由於其效率太低。學習
最好狀況時間複雜度 在最理想的狀況下,執行這段代碼的時間複雜度。 好比:查找的元素就是數組的第一個元素,這時候這段代碼只須要執行一次,時間複雜度最低。測試
最壞狀況時間複雜度 在最糟糕的狀況下,執行這段代碼的時間複雜度。 好比:查找的元素不在數組中,或者是數組的最後一個(從第一個開始遍歷),這時候這個數組須要所有遍歷一遍,時間複雜度最高。spa
平均狀況時間複雜度 全部會出現的狀況除以次數 好比:查找的元素在數組的第一個,查找的元素在數組的最後一個,查找的元素在數組的中間,查找的元素不在數組裏面,將以上全部狀況統計起來,除以出現的次數,就是平均狀況時間複雜度。code
均攤時間複雜度 對一個數據結構進行一組連續操做中,大部分狀況下時間複雜度都很低,只有個別狀況下時間複雜度比較高,並且這些操做之間存在先後連貫的時許關係。一般,可以應用均攤時間複雜度分析的場合,通常均攤時間複雜度就等於最好狀況時間複雜度。開發
// 生成一個數組,長度爲n
int[] array = new int[n];
int count = 0;
void insert(int temp) {
// 判斷數組是否存滿了
if(count == array.length) {
int sum = 0;
// 計算數組裏面元素的和
for (int i = 0; i < array.length; ++i){
sum = sum + array[i];
}
// 將和賦給數組的第一個
array[0] = sum;
// 下次插入的時候只能插入到第二個元素
count = 1;
}
// 若是數組沒存滿,則插入元素
array[count] = temp;
++count;
}複製代碼