/* * 315. Count of Smaller Numbers After Self * 2016-7-5 by Mingyang */ public List<Integer> countSmaller(int[] nums) { Integer[] ans = new Integer[nums.length]; List<Integer> sorted = new ArrayList<Integer>(); for (int i = nums.length - 1; i >= 0; i--) { int index = findIndex(sorted, nums[i]); ans[i] = index; sorted.add(index, nums[i]); } return Arrays.asList(ans); } private int findIndex(List<Integer> sorted, int target) { if (sorted.size() == 0) return 0; int start = 0; int end = sorted.size() - 1; if (sorted.get(end) < target) return end + 1; if (sorted.get(start) >= target) return 0; while (start + 1 < end) { int mid = start + (end - start) / 2; if (sorted.get(mid) < target) { start = mid + 1; } else { end = mid; } } if (sorted.get(start) >= target) return start; return end; }