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