6.19刷题打卡
题目 数组中的逆序对
最爱的树状数组
int mod = (int) 1e9 + 7; public int InversePairs (int[] nums) { // write code here int[] a = nums.clone(); Arrays.sort(a); int n = a.length; int[] t = new int[n + 1]; long ans = 0; for (int v: nums) { int l = 0, r = n - 1; while (l <= r) { int m = l + r >> 1; if (a[m] < v) l = m + 1; else r = m - 1; } l = n - l; // 0 ~ n - 1 -> 1 ~ n ans = (ans + find(t, l)) % mod; add(t, l); } return (int) ans; } void add(int[] t, int i) { while (i < t.length) { t[i]++; i += i & -i; } } long find(int[] t, int i) { long ans = 0; while (i > 0) { ans += t[i]; i -= i & -i; } return ans; }
打卡截图
#和牛牛一起刷题打卡#