LeetCode 493. Reverse Pairs
2021-02-18 23:40:39
# leetcode
# core problems
# 剑指offer
Problem
1. 题目简述
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
Example 1:
输入: [7,5,6,4]
输出: 5
限制:
0 <= 数组长度 <= 50000
2. 算法思路
这道题有两种做法,一种是分治法,或者说归并排序;另一种是树状数组。这里只写第一种做法,第二种工作法待更新。
分治法(归并排序)
对于一个数组,我们先将其分为两段,也就是两个数组,l和r,然后分别进行排序。排好序后,我们进行遍历,两个指针和j,一开始指向l[0]和r[0],然后r指针不断向后移动,直到r[j] >= r[i],此时,从mid+1到j之间的所有数字和l[0]构成逆序对!然后i也向后移,直到mid。这样一层层分下去,和归并算法的思路一致。
1 | class Solution { |