LeetcodeCount of Smaller Numbers After Self
Posted wuezs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetcodeCount of Smaller Numbers After Self相关的知识,希望对你有一定的参考价值。
题目链接: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, 1, 0]
.
思路:
建立一个二叉搜索树,在建树的过程中,记录在数组右边比自身小的元素个数。 算法复杂度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;
以上是关于LeetcodeCount of Smaller Numbers After Self的主要内容,如果未能解决你的问题,请参考以下文章
LeetcodeCount of Smaller Numbers After Self
315. Count of Smaller Numbers After Self
LeetCode Count of Smaller Numbers After Self
Lintcode: Count of Smaller Number