#3569

Maximize Count of Distinct Primes After Split

Hard
ArrayMathSegment TreeNumber TheoryHash MapArray
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(n)
Space
O(1)
O(n)
💡

Intuition

Time O(n)Space O(n)

Use a sieve to preprocess primes and maintain counts of distinct primes efficiently. This allows quick updates and calculations for each query.

⚙️

Algorithm

3 steps
  1. 1Step 1: Preprocess all primes up to max(nums) using the Sieve of Eratosthenes.
  2. 2Step 2: Maintain a count of distinct primes in prefix and suffix using two arrays.
  3. 3Step 3: For each query, update the number and recalculate distinct counts, then find the maximum distinct primes across all splits.
solution.py17 lines
1def maxDistinctPrimes(nums, queries):
2    from sympy import isprime
3    max_num = max(nums)
4    primes = [False] * (max_num + 1)
5    for i in range(2, max_num + 1):
6        if isprime(i): primes[i] = True
7    prefix_count = [0] * len(nums)
8    suffix_count = [0] * len(nums)
9    for i in range(len(nums)):
10        prefix_count[i] = prefix_count[i-1] + (1 if primes[nums[i]] and (i == 0 or nums[i] != nums[i-1]) else 0)
11    for i in range(len(nums)-1, -1, -1):
12        suffix_count[i] = suffix_count[i+1] + (1 if primes[nums[i]] and (i == len(nums)-1 or nums[i] != nums[i+1]) else 0)
13    results = []
14    for idx, val in queries:
15        nums[idx] = val
16        results.append(max(prefix_count[k-1] + suffix_count[k] for k in range(1, len(nums))))
17    return results

Complexity note: Preprocessing primes takes O(n log log n), and each query is handled in O(n) due to prefix/suffix counts.

  • 1Preprocessing primes allows for efficient checks.
  • 2Maintaining prefix and suffix counts optimizes distinct prime calculations.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.