保证前面的数组有序,使用二分法查找插入的位置,即可计算能和前面的数组成多少逆序对。 二分插入排序比较好懂。
| 1 | 2 | 3 | null | 5 | 6 | 7 | 8 | 4 |
import java.util.Arrays; public class Solution { public static void main(String[] args) { int[] arr = new int[]{7,6,5,4,3,2,1,0}; int result = new Solution().InversePairs(arr); System.out.println(result); } public int InversePairs(int[] array) { long result = 0; for (int j = 1; j < array.length; j++) { int tmp = array[j]; int index = Arrays.binarySearch(array, 0, j, tmp); int pos = (-index - 1); if (pos < j) { int len = j - pos; System.arraycopy(array, pos, array, pos+1, len); array[pos] = tmp; result += len; result %= 1000000007; } } return (int) result; } }