#3569
Maximize Count of Distinct Primes After Split
HardArrayMathSegment TreeNumber TheoryHash MapArray
Approaches
Brute ForceOptimal
Complexity Comparison
| Brute Force | Optimal 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- 1Step 1: Preprocess all primes up to max(nums) using the Sieve of Eratosthenes.
- 2Step 2: Maintain a count of distinct primes in prefix and suffix using two arrays.
- 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.