時間複雜度為O(1)的跳台階

2021-09-16 21:53:12 字數 672 閱讀 8850

分析:這是一道典型的動態規劃的題目,我們可以這樣想,我們最後一步可以跳1級,也可以跳2級,跳**…跳n級,我們用最後一步跳一級來舉例子,假設最後一步跳1級,那還剩下n-1個台階,又可以分為最後一步跳1級,2級…直到n-1級。 好啦,就分析到這裡,我們可以看到當我們最後一步跳一級的時候,剩下的n-1級台階又是乙個同樣的範圍縮小的子問題,我們當然可以使用遞迴來做,最好構件乙個輔助陣列,可以節省大量的運算量。

接下來講解我的**:

我以n = 3 時舉例:

只有 1 級台階 : 只有1 種 跳法;

只有 2 級台階 : 有 2 中跳法;

當有 3 級台階時: 我們要分為三種情況

(1) 最後一步跳一級 , 剩下2級,即再跳個2級的就可以了

(2) 最後一步跳兩級 , 剩下1級,即再跳個1級的就可以了

(3) 最後一步跳**, 沒台階了,一步到位即 算 1 中方法

演算法已經很清楚了

f(1) = 1

f(2) = 2

f(3) = f(2) + f(1) + 1 = 4

f(4) = f(3) + f(2) + f(1) + 1 = 8

其實呢,這是個公比為2,首項為1的等比數列;

所以第n項的值是 f(n) = a1 * q^(n-1)

出處: bilibili

刪除鍊錶結點(時間複雜度為O 1 ))

題目 給定鍊錶的頭指標和乙個結點指標,在o 1 時間刪除該結點。鍊錶結點的定義如下 struct listnode 函式的宣告如下 void deletenode listnode plisthead,listnode ptobedeleted 分析 這是一道廣為流傳的google面試題,能有效考察...

設計複雜度為O 1 的LRU快取結構

題目描述 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 要求 示例1輸入 複製 1,1,1 1,2,2 1,3,2 2,1 1,4,4 2,2 3 輸出複製 1,1 說明第一次操作後 最常使用的記錄為 1 1 第二次操作後 最常使用的記錄為 2 2 1 1 變為最不常用...

實現鍊錶逆序,空間複雜度為O(1)

乙個演算法的空間複雜度只考慮在執行過程中為區域性變數分配的儲存空間的大小,它包括為參數列中形參變數分配的儲存空間和為在函式體中定義的區域性變數分配的儲存空間兩個部分。include using namespace std struct linknode linknode reverselink li...