0493. Reverse Pairs
Last updated
Was this helpful?
Last updated
Was this helpful?
Was this helpful?
https://leetcode.com/problems/reverse-pairs
Given an integer array nums
, return the number of reverse pairs in the array.
A reverse pair is a pair (i, j)
where 0 <= i < j < nums.length
and nums[i] > 2 * nums[j]
.
Example 1:
**Input:** nums = [1,3,2,3,1]
**Output:** 2
Example 2:
**Input:** nums = [2,4,3,5,1]
**Output:** 3
Constraints:
1 <= nums.length <= 5 * 104
-231 <= nums[i] <= 231 - 1
class Solution {
public int reversePairs(int[] nums) {
// edge cases
if (nums == null || nums.length <= 1) return
```java class Solution { int count = 0; public int reversePairs(int[] nums) { // edge cases if (nums == null || nums.length <= 1) return 0;
merge(nums, 0, nums.length-1);
return count;
}
private int[] merge(int[] nums, int start, int end) {
if (start == end) return new int[]{nums[start]};
int mid = start + (end - start) / 2;
int[] left = merge(nums, start, mid);
int[] right = merge(nums, mid+1, end);
int[] res = new int[end - start + 1];
int l = 0, r = 0, i = 0;
int p = 0;
while (l < left.length) {
// extract info
while (p < right.length && right[p] < left[l] / 2.0) p++;
count += p;
// merge process
while (r < right.length && right[r] < left[l]) res[i++] = right[r++];
res[i++] = left[l++];
}
while (r < right.length) res[i++] = right[r++];
return res;
}
} ``