1399. 统计最大组的数目
题目描述
给你一个整数 n
。请你先求出从 1
到 n
的每个整数 10 进制表示下的数位和(每一位上的数字相加),然后把数位和相等的数字放到同一个组中。
请你统计每个组中的数字数目,并返回数字数目并列最多的组有多少个。
示例 1:
输入:n = 13 输出:4 解释:总共有 9 个组,将 1 到 13 按数位求和后这些组分别是: [1,10],[2,11],[3,12],[4,13],[5],[6],[7],[8],[9]。总共有 4 个组拥有的数字并列最多。
示例 2:
输入:n = 2 输出:2 解释:总共有 2 个大小为 1 的组 [1],[2]。
示例 3:
输入:n = 15 输出:6
示例 4:
输入:n = 24 输出:5
提示:
1 <= n <= 10^4
解法
方法一:哈希表或数组
我们注意到数字范围不超过 \(10^4\),因此数位和的范围也不超过 \(9 \times 4 = 36\),因此我们可以用哈希表或者一个长度为 \(40\) 的数组 \(cnt\) 来统计每个数位和的个数,用一个变量 \(mx\) 表示最大的数位和个数。
我们在 \([1,..n]\) 中枚举每个数,计算其数位和 \(s\),然后将 \(cnt[s]\) 加 \(1\),如果 \(mx \lt cnt[s]\),则更新 \(mx = cnt[s]\),并将 \(ans\) 置为 \(1\),如果 \(mx = cnt[s]\),则将 \(ans\) 加 \(1\)。
最后返回 \(ans\) 即可。
时间复杂度 \(O(n \times \log M)\),空间复杂度 \((\log M)\)。其中 \(n\) 为给定的数字,而 \(M\) 是 \(n\) 的数字范围。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|