2892. Minimizing Array After Replacing Pairs With Their Product
Description
Given an integer array nums and an integer k, you can perform the following operation on the array any number of times:
- Select two adjacent elements of the array like
xandy, such thatx * y <= k, and replace both of them with a single element with valuex * y(e.g. in one operation the array[1, 2, 2, 3]withk = 5can become[1, 4, 3]or[2, 2, 3], but can't become[1, 2, 6]).
Return the minimum possible length of nums after any number of operations.
Example 1:
Input: nums = [2,3,3,7,3,5], k = 20 Output: 3 Explanation: We perform these operations: 1. [2,3,3,7,3,5] -> [6,3,7,3,5] 2. [6,3,7,3,5] -> [18,7,3,5] 3. [18,7,3,5] -> [18,7,15] It can be shown that 3 is the minimum length possible to achieve with the given operation.
Example 2:
Input: nums = [3,3,3,3], k = 6 Output: 4 Explanation: We can't perform any operations since the product of every two adjacent elements is greater than 6. Hence, the answer is 4.
Constraints:
1 <= nums.length <= 1050 <= nums[i] <= 1091 <= k <= 109
Solutions
Solution 1: Greedy
We use a variable $ans$ to record the current length of the array, and a variable $y$ to record the current product of the array. Initially, $ans = 1$ and $y = nums[0]$.
We start traversing from the second element of the array. Let the current element be $x$:
- If $x = 0$, then the product of the entire array is $0 \le k$, so the minimum length of the answer array is $1$, and we can return directly.
- If $x \times y \le k$, then we can merge $x$ and $y$, that is, $y = x \times y$.
- If $x \times y \gt k$, then we cannot merge $x$ and $y$, so we need to treat $x$ as a separate element, that is, $ans = ans + 1$, and $y = x$.
The final answer is $ans$.
The time complexity is $O(n)$, where n is the length of the array. The space complexity is $O(1)$.
Python Code
| |
Java Code
| |
C++ Code
| |
Go Code
| |
TypeScript Code
| |
