#3250
Find the Count of Monotonic Pairs I
HardArrayMathDynamic ProgrammingCombinatoricsPrefix SumDynamic ProgrammingPrefix SumCombinatorial Counting
Approaches
Brute ForceOptimal
Complexity Comparison
| Brute Force | Optimal Solution★ | |
|---|---|---|
| Time | O(n²) | O(n * m) |
| Space | O(1) | O(n * m) |
💡
Intuition
Time O(n * m)Space O(n * m)
The optimal solution uses dynamic programming to count the valid monotonic pairs efficiently, leveraging the constraints of the problem. We build upon previous results to avoid redundant calculations.
⚙️
Algorithm
3 steps- 1Step 1: Initialize a 2D DP array where dp[i][s] represents the count of monotonic pairs of length i with arr1[i-1] = s.
- 2Step 2: For each index i from 1 to n, and for each possible value s from 0 to nums[i-1], update dp[i][s] based on the previous values in dp[i-1].
- 3Step 3: Use prefix sums to efficiently calculate the number of valid pairs for arr1 and arr2.
solution.py15 lines
1# Full working Python code
2def countMonotonicPairs(nums):
3 MOD = 10**9 + 7
4 n = len(nums)
5 dp = [[0] * 51 for _ in range(n + 1)]
6 dp[0][0] = 1
7
8 for i in range(1, n + 1):
9 prefix = [0] * 51
10 for s in range(51):
11 prefix[s] = (prefix[s - 1] + dp[i - 1][s]) % MOD if s > 0 else dp[i - 1][s]
12 for s in range(nums[i - 1] + 1):
13 dp[i][s] = prefix[s]
14
15 return sum(dp[n]) % MODℹ
Complexity note: The complexity is O(n * m) where n is the length of nums and m is the maximum value in nums (which is 50). This is efficient due to the limited range of values.
- 1Dynamic programming can significantly reduce the time complexity by avoiding redundant calculations.
- 2Understanding monotonic properties helps in designing efficient algorithms.
Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.