返回介绍

solution / 1300-1399 / 1399.Count Largest Group / README_EN

发布于 2024-06-17 01:03:20 字数 4153 浏览 0 评论 0 收藏 0

1399. Count Largest Group

中文文档

Description

You are given an integer n.

Each number from 1 to n is grouped according to the sum of its digits.

Return _the number of groups that have the largest size_.

 

Example 1:

Input: n = 13
Output: 4
Explanation: There are 9 groups in total, they are grouped according sum of its digits of numbers from 1 to 13:
[1,10], [2,11], [3,12], [4,13], [5], [6], [7], [8], [9].
There are 4 groups with largest size.

Example 2:

Input: n = 2
Output: 2
Explanation: There are 2 groups [1], [2] of size 1.

 

Constraints:

  • 1 <= n <= 104

Solutions

Solution 1: Hash Table or Array

We note that the number does not exceed $10^4$, so the sum of the digits also does not exceed $9 \times 4 = 36$. Therefore, we can use a hash table or an array of length $40$, denoted as $cnt$, to count the number of each sum of digits, and use a variable $mx$ to represent the maximum count of the sum of digits.

We enumerate each number in $[1,..n]$, calculate its sum of digits $s$, then increment $cnt[s]$ by $1$. If $mx < cnt[s]$, we update $mx = cnt[s]$ and set $ans$ to $1$. If $mx = cnt[s]$, we increment $ans$ by $1$.

Finally, we return $ans$.

The time complexity is $O(n \times \log M)$, and the space complexity is $O(\log M)$. Where $n$ is the given number, and $M$ is the range of $n$.

class Solution:
  def countLargestGroup(self, n: int) -> int:
    cnt = Counter()
    ans = mx = 0
    for i in range(1, n + 1):
      s = 0
      while i:
        s += i % 10
        i //= 10
      cnt[s] += 1
      if mx < cnt[s]:
        mx = cnt[s]
        ans = 1
      elif mx == cnt[s]:
        ans += 1
    return ans
class Solution {
  public int countLargestGroup(int n) {
    int[] cnt = new int[40];
    int ans = 0, mx = 0;
    for (int i = 1; i <= n; ++i) {
      int s = 0;
      for (int x = i; x > 0; x /= 10) {
        s += x % 10;
      }
      ++cnt[s];
      if (mx < cnt[s]) {
        mx = cnt[s];
        ans = 1;
      } else if (mx == cnt[s]) {
        ++ans;
      }
    }
    return ans;
  }
}
class Solution {
public:
  int countLargestGroup(int n) {
    int cnt[40]{};
    int ans = 0, mx = 0;
    for (int i = 1; i <= n; ++i) {
      int s = 0;
      for (int x = i; x; x /= 10) {
        s += x % 10;
      }
      ++cnt[s];
      if (mx < cnt[s]) {
        mx = cnt[s];
        ans = 1;
      } else if (mx == cnt[s]) {
        ++ans;
      }
    }
    return ans;
  }
};
func countLargestGroup(n int) (ans int) {
  cnt := [40]int{}
  mx := 0
  for i := 1; i <= n; i++ {
    s := 0
    for x := i; x > 0; x /= 10 {
      s += x % 10
    }
    cnt[s]++
    if mx < cnt[s] {
      mx = cnt[s]
      ans = 1
    } else if mx == cnt[s] {
      ans++
    }
  }
  return
}
function countLargestGroup(n: number): number {
  const cnt: number[] = new Array(40).fill(0);
  let mx = 0;
  let ans = 0;
  for (let i = 1; i <= n; ++i) {
    let s = 0;
    for (let x = i; x; x = Math.floor(x / 10)) {
      s += x % 10;
    }
    ++cnt[s];
    if (mx < cnt[s]) {
      mx = cnt[s];
      ans = 1;
    } else if (mx === cnt[s]) {
      ++ans;
    }
  }
  return ans;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文