这道题推荐用 归并排序 索引数组 来做时间复杂度稳定在 O(n log n)。也可以用 树状数组 值偏移代码更短但要注意题目约束 -10^4 nums[i] 10^4。Java Implementation — Merge Sort Index Arrayimport java.util.ArrayList;import java.util.List;class Solution {private int[] count;private int[] index;private int[] tmpIndex;public ListInteger countSmaller(int[] nums) { int n nums.length; count new int[n]; index new int[n]; tmpIndex new int[n]; for (int i 0; i n; i) { index[i] i; } mergeSort(nums, 0, n - 1); ListInteger result new ArrayList(); for (int c : count) { result.add(c); } return result; } private void mergeSort(int[] nums, int left, int right) { if (left right) { return; } int mid left (right - left) / 2; mergeSort(nums, left, mid); mergeSort(nums, mid 1, right); // Merge: count how many elements from the right part are smaller int i left; int j mid 1; int k left; while (i mid j right) { if (nums[index[i]] nums[index[j]]) { // All elements from mid1 to j-1 are smaller than nums[index[i]] count[index[i]] j - mid - 1; tmpIndex[k] index[i]; } else { tmpIndex[k] index[j]; } } while (i mid) { count[index[i]] j - mid - 1; tmpIndex[k] index[i]; } while (j right) { tmpIndex[k] index[j]; } System.arraycopy(tmpIndex, left, index, left, right - left 1); }}Java Implementation — Binary Indexed TreeThis version is clean if you rely on the constraint -10^4 nums[i] 10^4.import java.util.ArrayList;import java.util.List;class Solution {private final int OFFSET 10001;private final int MAX 20002;private final int[] tree new int[MAX 1];public ListInteger countSmaller(int[] nums) { int n nums.length; int[] res new int[n]; for (int i n - 1; i 0; i--) { int x nums[i] OFFSET; res[i] query(x - 1); update(x, 1); } ListInteger result new ArrayList(); for (int v : res) { result.add(v); } return result; } private int lowbit(int x) { return x -x; } private int query(int x) { int sum 0; while (x 0) { sum tree[x]; x - lowbit(x); } return sum; } private void update(int x, int delta) { while (x MAX) { tree[x] delta; x lowbit(x); } }}ComplexityMethod Time SpaceMerge sort O(n log n) O(n)BIT with offset O(n log V) O(V)Here V 20002 for the BIT version. If the value range were larger, you would need coordinate compression first.Key PointsMerge sort version counts inversions during merging. When a left-side element is placed, all already-placed right-side elements are smaller than it.BIT version scans from right to left. query(x - 1) gives how many smaller numbers have already appeared on the right.The merge sort approach is more general; the BIT approach is shorter but depends on the value range.需要我帮你把 BIT 版本的坐标压缩写法也整理出来吗这样值范围大了也能直接用。