一道演算法題 降低空間複雜度的思考

2021-07-29 20:00:22 字數 613 閱讀 1176

最近在看演算法(第四版),裡面有一道演算法題。第一次寫的時候,採用了雙層巢狀,時間複雜度為o(n^2); 後來發現時間複雜度可以降低到o(n).

原題:編寫乙個靜態方法histogram(),接受乙個整型陣列a和乙個整數m為引數並返回乙個大小為m的陣列,其中第i個元素的值為整數i在引數陣列中出現的次數。如果a中的值均在0到m-1之間,返回陣列中所有元素之和應該和a.length相等。

最後一句話本來就值得玩味,跟a.length相等這個就要想一會兒,還真相等。所有項都被計數了,自然相等唄。

第一次寫的複雜度o(n^2)的**塊:

public

static

int histogram(int a, int m)

b[i] = j;

}return b;

}

還專門設定了j來計數,計數了某個數出現的次數,在寫入到返回的陣列中。兩個for巢狀了。

改進後的**如下:

public

static

int histogram(int a, int m)

這樣直接把某個數所在項加一,只用迴圈一次就好,大大降低時間複雜度。

每天一道演算法題 時間複雜度為O n 的排序

有1,2,一直到n的無序陣列,求排序演算法,並且要求時間複雜度為o n 空間複雜度為o 1 使用交換,而且一次只能交換兩個數。這個是以前看到的演算法題,題目不難。但是要求比較多,排序演算法中,時間複雜度為o n 就是基數排序了。現在介紹兩種解法 解法一 用陣列特性 下標實現交換 掃瞄陣列,每次arr...

演算法的時間複雜度 空間複雜度

時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...

演算法的複雜度 演算法的時間複雜度和空間複雜度

在一次筆試題目中,發現了自己對於演算法的時間複雜度問題上並沒有完全清晰這個概念和計算方法,故上網尋找到比較好的詳細介紹來學習。演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。1.時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也...