You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组中寻找出现次数等于自身的最大数的代码问题排查

Solution: Find the Largest Number n Where n Appears Exactly n Times in an Array

First, let's restate the requirement clearly to make sure we're on the same page:

Given an array of integers, find the largest integer n such that the number of times n appears in the array is exactly equal to n. If no such number exists, return 0.

Example Scenarios:

  • Input: [2,3,3,3,1] → Output: 3 (3 appears exactly 3 times)
  • Input: [2,2,4,4,4] → Output: 2 (2 appears exactly 2 times; 4 appears 3 times, which doesn't meet the rule)
  • Your broken test case: [3,3,2,2] → Expected output: 2 (2 appears exactly 2 times; 3 appears 2 times, which doesn't qualify), but your code returns 0.

Why Your Code Is Failing

Let's break down the most common reasons for this bug:

  • Incorrect Result Update Logic: If your code initializes the result to 0 but never properly updates it when a valid n is found, it'll stick to 0 even when valid numbers exist.
  • Counting Logic Errors: Maybe you're mixing up the number and its count (e.g., checking if the count equals the count of the count instead of the number itself) or using a fixed-size array for counting that's too small (e.g., if your array has a number larger than the array's length, the count won't be stored correctly).
  • Skipping Valid Smaller Numbers: If your code only checks numbers up to the array's maximum value without verifying smaller valid candidates (like your test case where 3 is invalid but 2 is valid), it might miss the correct answer entirely.

Fixed Solution

Here are two solid implementations that handle all cases correctly, starting with a straightforward approach, then an optimized version.

Approach 1: Count + Collect Valid Candidates

First, count the occurrences of each number, filter out numbers that meet the count == number rule, then return the maximum of those candidates (or 0 if there are none).

def find_max_valid_n(arr):
    # Step 1: Count occurrences of each number
    num_counts = {}
    for num in arr:
        num_counts[num] = num_counts.get(num, 0) + 1
    
    # Step 2: Filter numbers where count equals the number itself
    valid_numbers = [n for n, cnt in num_counts.items() if cnt == n]
    
    # Step 3: Return the largest valid number, or 0 if none exist
    return max(valid_numbers) if valid_numbers else 0

Approach 2: Optimized Early Exit

Instead of collecting all valid numbers, start checking from the largest number in the array downwards. The first valid number we find is our answer, so we can exit early (saves time for large arrays).

def find_max_valid_n(arr):
    if not arr:
        return 0
    
    # Step 1: Count occurrences
    num_counts = {}
    for num in arr:
        num_counts[num] = num_counts.get(num, 0) + 1
    
    # Step 2: Check from largest to smallest number
    max_num_in_arr = max(arr)
    for n in range(max_num_in_arr, 0, -1):
        if num_counts.get(n, 0) == n:
            return n
    
    # No valid numbers found
    return 0

Testing the Broken Case

For input [3,3,2,2]:

  • Both approaches count 3 appearing 2 times (invalid) and 2 appearing 2 times (valid).
  • The first approach collects [2] and returns max([2]) = 2.
  • The second approach starts at 3 (checks count=2 !=3), then checks 2 (count=2 ==2) and returns 2 immediately.

How to Debug Your Original Code

To fix your existing code, walk through these checks:

  1. Print out the count dictionary for the test case [3,3,2,2]—does it correctly show {3:2, 2:2}?
  2. Verify your condition for valid numbers: are you checking count[n] == n (correct) instead of something like n == count[count[n]] (wrong)?
  3. Make sure you're updating your result variable correctly: when you find a valid n, set your result to the maximum between the current result and n, not just overwrite it.
  4. Ensure you're not skipping numbers smaller than the array's maximum (your test case's valid number is 2, which is smaller than the maximum 3).

内容的提问来源于stack exchange,提问作者Mohannad Webman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:31:17