|
31 | 31 | public class main {
|
32 | 32 |
|
33 | 33 | public static void main(String[] args) {
|
34 |
| - int[] arr = new int[]{ |
35 |
| - 4,3,2,7,8,2,3,1 |
36 |
| - }; |
37 |
| - for (int n : new FindAllNumbersDisappearedInAnArray().findDisappearedNumbers(arr)) { |
| 34 | + List<Integer> list = new test().countSmaller(new int[] { |
| 35 | + 5, 2, 6, 1 |
| 36 | + }); |
| 37 | + for (Integer n : list) { |
38 | 38 | System.out.print(n + " ");
|
39 | 39 | }
|
40 | 40 | }
|
41 | 41 |
|
42 |
| - public boolean wordBreak(String s, List<String> wordDict) { |
43 |
| - int n = s.length(); |
44 | 42 |
|
45 |
| - boolean[] dp = new boolean[n + 1]; |
46 |
| - dp[0] = true; |
| 43 | + static class test { |
| 44 | + class Node { |
| 45 | + Node left, right; |
| 46 | + int val; |
47 | 47 |
|
48 |
| - for (int i = 1; i < s.length(); i++) { |
49 |
| - for (String word: wordDict) { |
50 |
| - int j = i - word.length(); |
51 |
| - if (j >= 0 && dp[j] && s.substring(j, i).equals(word)) { |
52 |
| - dp[i] = true; |
53 |
| - break; |
54 |
| - } |
| 48 | + /** |
| 49 | + * 左子树的节点个数 |
| 50 | + */ |
| 51 | + int sum; |
| 52 | + |
| 53 | + /** |
| 54 | + * 节点重复数 |
| 55 | + */ |
| 56 | + int dup = 1; |
| 57 | + |
| 58 | + public Node(int v, int s) { |
| 59 | + val = v; |
| 60 | + sum = s; |
| 61 | + } |
| 62 | + } |
| 63 | + |
| 64 | + public List<Integer> countSmaller(int[] nums) { |
| 65 | + Node root = null; |
| 66 | + Integer[] res = new Integer[nums.length]; |
| 67 | + for (int i = nums.length - 1; i >= 0; i--) { |
| 68 | + root = insert(root, nums[i], 0, res, i); |
55 | 69 | }
|
| 70 | + return Arrays.asList(res); |
56 | 71 | }
|
57 | 72 |
|
58 |
| - return dp[n]; |
| 73 | + private Node insert(Node root, int n, int pre, Integer[] res, int i) { |
| 74 | + if (root == null) { |
| 75 | + root = new Node(n, 0); |
| 76 | + res[i] = pre; |
| 77 | + } else if (root.val == n) { |
| 78 | + root.dup++; |
| 79 | + res[i] = pre + root.sum; |
| 80 | + } else if (n < root.val) { |
| 81 | + root.sum++; |
| 82 | + root.left = insert(root.left, n, pre, res, i); |
| 83 | + } else { |
| 84 | + root.right = insert(root.right, n, pre + root.sum + root.dup, res, i); |
| 85 | + } |
| 86 | + return root; |
| 87 | + } |
59 | 88 | }
|
| 89 | + |
| 90 | + |
60 | 91 | }
|
0 commit comments