2963. Count the Number of Good Partitions
Description
You are given a 0-indexed array nums
consisting of positive integers.
A partition of an array into one or more contiguous subarrays is called good if no two subarrays contain the same number.
Return the total number of good partitions of nums
.
Since the answer may be large, return it modulo 109 + 7
.
Example 1:
Input: nums = [1,2,3,4] Output: 8 Explanation: The 8 possible good partitions are: ([1], [2], [3], [4]), ([1], [2], [3,4]), ([1], [2,3], [4]), ([1], [2,3,4]), ([1,2], [3], [4]), ([1,2], [3,4]), ([1,2,3], [4]), and ([1,2,3,4]).
Example 2:
Input: nums = [1,1,1,1] Output: 1 Explanation: The only possible good partition is: ([1,1,1,1]).
Example 3:
Input: nums = [1,2,1,3] Output: 2 Explanation: The 2 possible good partitions are: ([1,2,1], [3]) and ([1,2,1,3]).
Constraints:
1 <= nums.length <= 105
1 <= nums[i] <= 109
Solutions
Solution 1: Hash Table + Grouping + Fast Power
According to the problem description, we know that the same number must be in the same subarray. Therefore, we use a hash table \(last\) to record the index of the last occurrence of each number.
Next, we use an index \(j\) to mark the index of the last element that has appeared among the elements, and use a variable \(k\) to record the number of subarrays that can currently be divided.
Then, we traverse the array \(nums\) from left to right. For the current number \(nums[i]\) we are traversing, we get its last occurrence index and update \(j = \max(j, last[nums[i]])\). If \(i = j\), it means that the current position can be the end of a subarray, and we increase \(k\) by \(1\). Continue to traverse until the entire array is traversed.
Finally, we consider the number of division schemes for \(k\) subarrays. The number of subarrays is \(k\), and there are \(k-1\) positions that can be divided (concatenated), so the number of schemes is \(2^{k-1}\). Since the answer may be very large, we need to take the modulo of \(10^9 + 7\). Here we can use fast power to speed up the calculation.
The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array \(nums\).
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|