[LeetCode][JavaScript]Count of Smaller Numbers After Self

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

https://leetcode.com/problems/count-of-smaller-numbers-after-self/



在数组中统计当前数之后比他小的数的个数,复杂度要小于O(n^2)。

首先注意到应该从右往左遍历,记录下访问过的数,这样就转化成了子问题:

怎么从一个数据结构中快速找出所有比他小的数,并且这个数据结构要支持O(logn)的插入操作。

那么就想到用二叉搜索树,所有左子树的数据都比当前节点小,这边用数组实现BST。

二分查找插入的位置,这个位置恰好也代表了左边有几个比他小的数。

 1 /**
 2  * @param {number[]} nums
 3  * @return {number[]}
 4  */
 5 var countSmaller = function(nums) {
 6     var i, bst = [], result = [], index, tt1, tt2;
 7     for(i = nums.length - 1; i >= 0; i--){
 8         index = getBSTIndex(bst, nums[i]);
 9         result.unshift(index);
10         bst.splice(index, 0, nums[i]);
11     }
12     return result;
13
14     function getBSTIndex(bst, num){
15         if(bst.length === 0 ) return 0;
16         var i = 0, j = bst.length - 1, middle;
17         if(bst[j] < num) return bst.length;
18         if(bst[i] >= num) return 0;
19         while(i + 1 < j){
20             middle = (i + j) >> 1;
21             if(bst[middle] < num)
22                 i = middle + 1;
23             else
24                 j = middle;
25         }
26         if(bst[i] >= num) return i;
27         return j;
28     }
29 };
时间: 2024-12-24 13:50:36

[LeetCode][JavaScript]Count of Smaller Numbers After Self的相关文章

剑指Offer 面试题36:数组中的逆序对及其变形(Leetcode 315. Count of Smaller Numbers After Self)题解

剑指Offer 面试题36:数组中的逆序对 题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 例如, 在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6),(7,5),(7,4),(6,4)和(5,4),输出5. 提交网址: http://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tpId=13&tqId=11188 或 htt

【Leetcode】Count 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 righ

leetcode 315. 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

第十四周 Leetcode 315. Count of Smaller Numbers After Self(HARD) 主席树

Leetcode315 题意很简单,给定一个序列,求每一个数的右边有多少小于它的树. O(n^2)的算法是显而易见的. 用普通的线段树可以优化到O(nlogn) 我们可以直接套用主席树的模板. 主席树的功能是什么呢? 其实就是一句话. 原序列a的子序列a[l,r]在a排序后的序列b的子序列[L,R]中的个数. 显然本题只用到了主席树的一小部分功能. const int N = 100000 + 5; int a[N], b[N], rt[N * 20], ls[N * 20], rs[N * 2

leetcode Count of Smaller Numbers After Self

题目连接 https://leetcode.com/problems/count-of-smaller-numbers-after-self/ Count of Smaller Numbers After Self Description 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]$

Count of Smaller Numbers After Self -- LeetCode

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

[LeetCode] 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

[LeetCode][JavaScript]Count Primes

Count Prime Description: Count the number of prime numbers less than a non-negative number, n. https://leetcode.com/problems/count-primes/ 找出所有小于n的数中的质数. 删数法.开一个1到n的数组,删除所有2的倍数,3的倍数...直到√n的倍数,最后剩下的就是质数. 1 /** 2 * @param {number} n 3 * @return {number

[email&#160;protected] [315/215] Count of Smaller Numbers After Self / Kth Largest Element in an Array (BST)

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