315. Count of Smaller Numbers After Self 发表于 2022-08-08 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051class Solution { private static class Element { private final int value; private final int index; public Element(int value, int index) { this.value = value; this.index = index; } } public List<Integer> countSmaller(int[] nums) { Element[] elements = new Element[nums.length]; for (int i = 0; i < nums.length; i++) { elements[i] = new Element(nums[i], i); } List<Integer> resultList = new ArrayList<>(Collections.nCopies(nums.length, 0)); Element[] tmp = new Element[nums.length]; mergeSort(elements, tmp, resultList, 0, nums.length - 1); return resultList; } private void mergeSort(Element[] elements, Element[] tmp, List<Integer> resultList, int left, int right) { if (left >= right) { return; } int mid = (left + right) >>> 1; mergeSort(elements, tmp, resultList, left, mid); mergeSort(elements, tmp, resultList, mid + 1, right); for (int k = left; k <= right; k++) { tmp[k] = elements[k]; } int i = left, j = mid + 1; for (int k = left; k <= right; k++) { if (i == mid + 1) { elements[k] = tmp[j++]; } else if (j == right + 1) { elements[k] = tmp[i++]; } else if (tmp[i].value > tmp[j].value) { resultList.set(tmp[i].index, resultList.get(tmp[i].index) + right - j + 1); elements[k] = tmp[i++]; } else { elements[k] = tmp[j++]; } } }} Reference315. Count of Smaller Numbers After Self