問題描述:
三逆數定義:給乙個數的序列a[0,1,....n-1]),當ia[j]>a[k]時,稱作ai,aj,ak為乙個三逆數。
現在給定乙個長度為n的陣列,求此陣列序列中存在三逆數的總個數。
本人暫時只想到o(n^2)時間複雜度的解法。不知道還沒有沒更好更快的解法。(誰有更好的解法,歡迎分享~)
o(n^3)解法:這個最直觀了,直接三層迴圈進行統計,即可求和三逆數總和。**太簡單了,就略過了~
o(n^2)解法:
1.進行預處理,先用r[1..n]陣列記錄,r[i]表示在第i個元素後面比第i個元素小的個數之和,此步為基本的動態規劃,時間複雜度為o(n^2)。
for(int i = 0; i< n; ++i) r[i] = 0;for(int i = n-2; i>= 0; i--)
}}
2.二層迴圈列舉每兩個元素,並進行累加求總和。
1 for(int i = 0; i< n; ++i)2 7 }
最後ans就是結果。這步時間也是o(n^2)。
因此整個解法總的時間複雜度還是o(n^2).
最長回文子串 動態規劃O N 2
分析 定義二維陣列dp i,j 用以表示si sj是回文 true 或不是回文 false 定義dp陣列全為false 第一次迴圈設定單個字元為回文子串 dp i i true 第二次迴圈判斷相鄰兩個字元dp i i 1 是否為回文,若是則將回文子串的起始位置設為i,長度設為2 第三次迴圈判斷長度l...
O n 2 三大排序演算法
一.如何分析乙個排序演算法?1.執行效率 2.記憶體消耗 原地排序演算法,就是特指空間複雜度位o 1 的排序演算法。氣泡排序 插入排序和選擇排序,都是原地排序演算法。3.穩定性 如果待排序的序列中存在值相等的元素,經過排序之後,相等元素之間原有的先後順序不變。二.為什麼學習o n 2 複雜度的排序演...
演算法 動態規劃(2)
練習2 在一組數中選擇幾個數字使其加起來和最大,但是選中的幾個數字不能相鄰,求最大的和 以以下這組資料舉栗子 我們依舊是之前的思想 選或者不選!依舊是最優解opt i 代表到第i個元素最優解是什麼 代表選擇第i個 代表不選擇第i個 我們發現這個展開圖中依舊出現了重疊子問題 比如opt 3 和opt ...