程式設計開發練習習題 Reverse Pairs

2022-09-23 07:39:08 字數 780 閱讀 4759

程式設計開發練習習題_reverse pairs。

這道題很明顯是一般逆序對的變形,我們同樣可以使用歸併排序來解決。

對於已經排序的 a[1 … n] 和 b[1 … m]歸併。我們在歸併的同時,統計滿足題目要求的逆序對的個數,如果存在 a[i] > 2*b[j],就此有j對逆序對(a[i], b[j])、(a[i], b[j - 1])、(a[i], b[j - 2])、、、(a[i], b[0])。那麼我們對a陣列從i=0到n-1掃瞄,查詢a[i] > 2*b[j]的最大j值,然後就可以計算出所有的逆序對了。這裡,統計逆序對的複雜度是o(mn)。那繼續觀察到一點, i從小到大掃瞄, 每次找到的滿足條件的最大j,後發現,j是遞增的, 也就是隨著i的增大, 找到的j值是不會減小的,所以,對於在下一輪掃瞄時候, j不是從0開始遍歷,而是從上一輪掃瞄找到的最大j值開始往後遍歷j, 基於此觀察, 時間複雜度為o(m + n),至於歸併操作,時間複雜度也是o(m+n), 所以歸併統計逆序對複雜度是o(m + n), 然後,利用分治策略的歸併排序演算法, 知道時間複雜度是o(nlogn)

class solution

while(rl <= r) arr[index++] = nums[rl++];

for(int i = 0; i < (r - l + 1); i++)

nums[l + i] = arr[i];

return ret;

}int merge_sort(vector & nums, int l, int r)

int reversepairs(vector& nums)

};

程式設計開發練習習題 規避

題目描述 2014 年7 月17 日,馬來西亞航空mh17 班機執飛阿姆斯特丹史基浦機場飛往吉隆坡國際機場航線時,在烏克蘭靠近俄羅斯邊界33,000 英呎高空疑受到9k37 山毛櫸地對空飛彈擊落墜毀。事件發生後,漢莎航空 法國航空 土耳其航空 俄羅斯洲際航空 達美航空 英國航空 俄羅斯航空 印度航空...

指標練習習題

1 int ref ref是8的位址,ref 1是4的位址,而 ref不是合法的c表示式,因為ref是常量而不是變數。2 乙個包含20個指向char的指標的陣列 char psa 20 乙個指向陣列的指標,其中陣列由20個char值構成 char pstr 20 3 定義乙個包含100個int值的陣...

python練習習題

一 使用if else語句 隨堂練習 使用if else語句 1 年齡在 22到35之間 列印 可以結婚 在其他年齡段 列印 拖出去槍斃 2 年齡在70歲以上 或者 患有老年痴呆 列印不能開車,否則可以開車 練習一 age int input 請輸入年齡 if 22 age 35 print f 你...