题目
题目来源:力扣(LeetCode)
假设你正在读取一串整数。每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数)。请实现数据结构和算法来支持这些操作,也就是说:
实现 track(int x) 方法,每读入一个数字都会调用该方法;
实现 getRankOfNumber(int x) 方法,返回小于或等于 x 的值的个数。
注意:本题相对原题稍作改动
示例:
输入:
[“StreamRank”, “getRankOfNumber”, “track”, “getRankOfNumber”]
[[], [1], [0], [0]]
输出:
[null,0,null,1]
思路分析
track将x..n区间的所有计数+1
getRankOfNumber累计0..x区间的所有计数
每次输⼊⼀个新x值,假设有arr[i]
var StreamRank = function () {
this.arr = new Array(50001).fill(0);
};
/**
* @param {number} x
* @return {void}
*/
StreamRank.prototype.track = function (x) {
this.arr[x] += 1;
};
/**
* @param {number} x
* @return {number}
*/
StreamRank.prototype.getRankOfNumber = function (x) {
let total = 0;
for (let i = 0; i <= x; i++) {
total += this.arr[i];
}
return total;
};
/**
* Your StreamRank object will be instantiated and called as such:
* var obj = new StreamRank()
* obj.track(x)
* var param_2 = obj.getRankOfNumber(x)
*/