每日一题——LeetCode1742.盒子中小球的最大数量
方法一 哈希表
就是统计所有编号的每位和,然后取出数量最多的那个和
var countBalls = function(lowLimit, highLimit) {
const count = new Map();
let res = 0;
for (let i = lowLimit; i <= highLimit; i++) {
let box = 0, x = i;
while (x !== 0) {
box += x % 10;
x = Math.floor(x / 10);
}
count.set(box, (count.get(box) || 0) + 1);
res = Math.max(res, count.get(box));
}
return res;
};
消耗时间和内存情况:
方法二 数组计数
最大编号10^5,那么盒子的编号不会超过45,直接创建一个数组,数组长度动态分配为highLimit的位数m*9,然后数组的每一项来计数编号的和,返回数组中最大的那一项
var countBalls = function(lowLimit, highLimit) {
let m = 0, t = highLimit;
while (t !== 0) {
m++;
t = Math.floor(t/ 10)
}
let count = new Array(9 * m + 1).fill(0);
let max = 0;
for (let i = lowLimit; i <= highLimit; i++) {
let j = i, dSum = 0;
while (j !== 0) {
dSum += j % 10;
j = Math.floor(j / 10);
}
count[dSum]++
max = Math.max(count[dSum], max);
}
return max;
};
消耗时间和内存情况: