码迷,mamicode.com
首页 > 其他好文 > 详细

315. Count of Smaller Numbers After Self

时间:2017-10-25 21:44:46      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:elements   递归调用   调用   res   增加   treenode   ddn   private   cti   

You are given an integer array nums and you have to return a new counts array. The counts array has the property where counts[i] is the number of smaller elements to the right of nums[i].

Example:

Given nums = [5, 2, 6, 1]

To the right of 5 there are 2 smaller elements (2 and 1).
To the right of 2 there is only 1 smaller element (1).
To the right of 6 there is 1 smaller element (1).
To the right of 1 there is 0 smaller element.

Return the array [2, 1, 1, 0].

含义:针对一个数组,找到每一位右面第一个小于它的值,没有的话就是0,返回数组

 1 public class Solution {
 2     private class TreeNode {
 3         public int val;
 4         public int count = 1;
 5         public TreeNode left, right;
 6 
 7         public TreeNode(int val) {
 8             this.val = val;
 9         }
10     }
11 
12     public List<Integer> countSmaller(int[] nums) {
13 //        构造一棵二分搜索树,稍有不同的地方是我们需要加一个变量smaller来记录比当前节点值小的所有节点的个数,我们每插入一个节点,会判断其和根节点的大小,
14 //        如果新的节点值小于根节点值,则其会插入到左子树中,我们此时要增加根节点的smaller,并继续递归调用左子节点的insert。
15 //        如果节点值大于根节点值,则需要递归调用右子节点的insert并加上根节点的smaller,并加1
16         
17         List<Integer> res = new ArrayList<>();
18         if(nums == null || nums.length == 0) {
19             return res;
20         }
21         TreeNode root = new TreeNode(nums[nums.length - 1]);
22         res.add(0);
23 
24         for(int i = nums.length - 2; i >= 0; i--) {
25             int count = addNode(root, nums[i]);
26             res.add(count);
27         }
28 
29         Collections.reverse(res);
30         return res;
31     }
32 
33     private int addNode(TreeNode root, int val) {
34         int curCount = 0;
35         while(true) {
36             if(val <= root.val) {
37                 root.count++;                   // add the inversion count
38                 if(root.left == null) {
39                     root.left = new TreeNode(val);
40                     break;
41                 } else {
42                     root = root.left;
43                 }
44             } else {
45                 curCount += root.count;
46                 if(root.right == null) {
47                     root.right = new TreeNode(val);
48                     break;
49                 } else {
50                     root = root.right;
51                 }
52             }
53         }
54 
55         return curCount;
56     }

 

315. Count of Smaller Numbers After Self

标签:elements   递归调用   调用   res   增加   treenode   ddn   private   cti   

原文地址:http://www.cnblogs.com/wzj4858/p/7731644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!