comments | difficulty | edit_url | rating | source | tags | |||
---|---|---|---|---|---|---|---|---|
true |
Easy |
1277 |
Weekly Contest 226 Q1 |
|
You are working in a ball factory where you have n
balls numbered from lowLimit
up to highLimit
inclusive (i.e., n == highLimit - lowLimit + 1
), and an infinite number of boxes numbered from 1
to infinity
.
Your job at this factory is to put each ball in the box with a number equal to the sum of digits of the ball's number. For example, the ball number 321
will be put in the box number 3 + 2 + 1 = 6
and the ball number 10
will be put in the box number 1 + 0 = 1
.
Given two integers lowLimit
and highLimit
, return the number of balls in the box with the most balls.
Example 1:
Input: lowLimit = 1, highLimit = 10 Output: 2 Explanation: Box Number: 1 2 3 4 5 6 7 8 9 10 11 ... Ball Count: 2 1 1 1 1 1 1 1 1 0 0 ... Box 1 has the most number of balls with 2 balls.
Example 2:
Input: lowLimit = 5, highLimit = 15 Output: 2 Explanation: Box Number: 1 2 3 4 5 6 7 8 9 10 11 ... Ball Count: 1 1 1 1 2 2 1 1 1 0 0 ... Boxes 5 and 6 have the most number of balls with 2 balls in each.
Example 3:
Input: lowLimit = 19, highLimit = 28 Output: 2 Explanation: Box Number: 1 2 3 4 5 6 7 8 9 10 11 12 ... Ball Count: 0 1 1 1 1 1 1 1 1 2 0 0 ... Box 10 has the most number of balls with 2 balls.
Constraints:
1 <= lowLimit <= highLimit <= 105
Observing the data range of the problem, the maximum number of the ball does not exceed
The answer is the maximum value in the array
The time complexity is
class Solution:
def countBalls(self, lowLimit: int, highLimit: int) -> int:
cnt = [0] * 50
for x in range(lowLimit, highLimit + 1):
y = 0
while x:
y += x % 10
x //= 10
cnt[y] += 1
return max(cnt)
class Solution {
public int countBalls(int lowLimit, int highLimit) {
int[] cnt = new int[50];
for (int i = lowLimit; i <= highLimit; ++i) {
int y = 0;
for (int x = i; x > 0; x /= 10) {
y += x % 10;
}
++cnt[y];
}
return Arrays.stream(cnt).max().getAsInt();
}
}
class Solution {
public:
int countBalls(int lowLimit, int highLimit) {
int cnt[50] = {0};
int ans = 0;
for (int i = lowLimit; i <= highLimit; ++i) {
int y = 0;
for (int x = i; x; x /= 10) {
y += x % 10;
}
ans = max(ans, ++cnt[y]);
}
return ans;
}
};
func countBalls(lowLimit int, highLimit int) (ans int) {
cnt := [50]int{}
for i := lowLimit; i <= highLimit; i++ {
y := 0
for x := i; x > 0; x /= 10 {
y += x % 10
}
cnt[y]++
if ans < cnt[y] {
ans = cnt[y]
}
}
return
}
function countBalls(lowLimit: number, highLimit: number): number {
const cnt: number[] = Array(50).fill(0);
for (let i = lowLimit; i <= highLimit; ++i) {
let y = 0;
for (let x = i; x; x = Math.floor(x / 10)) {
y += x % 10;
}
++cnt[y];
}
return Math.max(...cnt);
}