加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

【Leetcode】Count of Smaller Numbers After Self

发布时间:2020-12-13 21:08:12 所属栏目:PHP教程 来源:网络整理
导读:题目链接:https://leetcode.com/problems/count-of-smaller-numbers-after-self/ 题目: You are given an integer arraynumsand you have to return a newcountsarray. Thecountsarray has the property where counts[i] is the number of smaller element

题目链接:https://leetcode.com/problems/count-of-smaller-numbers-after-self/

题目:

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,0].

思路:

建立1个2叉搜索树,在建树的进程中,记录在数组右侧比本身小的元素个数。 算法复杂度O(nlogn),用动态计划复杂度为O(n^2)。

其中cnt为该结点相同大小元素的个数,用于重复元素判断。。。其实可以省略。。懒得改了

算法:

public List<Integer> countSmaller(int[] nums) { List<Integer> list = new ArrayList<Integer>(); int res[] = new int[nums.length]; for (int i = nums.length - 1; i >= 0; i--) { res[i] = insert(nums[i]); } for (int i : res) { list.add(i); } return list; } TreeNode tRoot; private Integer insert(int val) { int cnt = 0; if (tRoot == null) { tRoot = new TreeNode(val); return cnt; } TreeNode root = tRoot; while (root != null) { if (val < root.val) { root.leftCnt++; if (root.left == null) { root.left = new TreeNode(val); break; } else root = root.left; } else if (val > root.val) { cnt += root.leftCnt + root.cnt; if (root.right == null) { root.right = new TreeNode(val); break; } else root = root.right; } else { cnt += root.leftCnt; root.cnt++; break; } } return cnt; }


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读