给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。
    输入: [5,2,6,1] 输出: [2,1,1,0]

    解释:

    5 的右侧有 2 个更小的元素 (2 和 1).

    2 的右侧仅有 1 个更小的元素 (1).

    6 的右侧有 1 个更小的元素 (1).

    1 的右侧有 0 个更小的元素.

    1. public class TreeNode{
    2. public TreeNode left;
    3. public TreeNode right;
    4. public int val; //节点值
    5. public count = 0;//左子树节点数量
    6. }
    7. public int[] rightLessNumber(int[] a){
    8. int n = a.length;
    9. int[] res = new int[n];
    10. TreeNode root = null;
    11. for(int i = n - 1; i >= 0; i--){//逆序插入二叉搜索树
    12. root = insertNode(root, a[i], res, i);
    13. }
    14. return res;
    15. }
    16. public TreeNode insertNode(root, val, res, resIndex){
    17. if(root == null) root = new TreeNode(val);
    18. else if (val <= root.val){
    19. root.count += 1;
    20. root.left = insertNode(root.left, val, res, resIndex);
    21. }
    22. else if(val > root.val){
    23. res[resIndex] += root.count + 1;
    24. root.right = insertNode(root.right, val, res, resIndex);
    25. }
    26. return root;
    27. }