MCPcopy Create free account
hub / github.com/Ainevsia/Leetcode-Rust / mergeSort

Method mergeSort

493. Reverse Pairs/Solution.cpp:18–43  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

16 Solution():rev_pair(0) {}
17
18 void mergeSort(int l, int r) {
19 if (l + 1 >= r) return; // zero or one element
20 int m = (l + r) >> 1; // two element : m = l + 1
21 mergeSort(l, m);
22 mergeSort(m, r);
23 int i = 0, j = 0;
24 while (j + m < r and i + l < m) {
25 if (n[i + l] > 2L * n[j + m]) {
26 rev_pair += m - l - i;
27 j ++ ;
28 } else {
29 i ++ ;
30 }
31 }
32 // merge
33 vector<int> buf;
34 buf.reserve(r - l);
35 for (i = j = 0; i + l < m and j + m < r;) {
36 if (n[i + l] > n[j + m]) buf.push_back(n[j++ + m]);
37 else buf.push_back(n[i++ + l]);
38 }
39 while (i + l < m) buf.push_back(n[i++ + l]);
40 while (j + m < r) buf.push_back(n[j++ + m]);
41 for (int i = 0; i < buf.size(); i++)
42 n[i + l] = buf[i];
43 }
44
45 int reversePairs(vector<int>& nums) {
46 if (nums.size() <= 1) return 0;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected