3576. Transform Array to All Equal Elements
Description
You are given an integer array nums
of size n
containing only 1
and -1
, and an integer k
.
You can perform the following operation at most k
times:
-
Choose an index
i
(0 <= i < n - 1
), and multiply bothnums[i]
andnums[i + 1]
by-1
.
Note that you can choose the same index i
more than once in different operations.
Return true
if it is possible to make all elements of the array equal after at most k
operations, and false
otherwise.
Example 1:
Input: nums = [1,-1,1,-1,1], k = 3
Output: true
Explanation:
We can make all elements in the array equal in 2 operations as follows:
- Choose index
i = 1
, and multiply bothnums[1]
andnums[2]
by -1. Nownums = [1,1,-1,-1,1]
. - Choose index
i = 2
, and multiply bothnums[2]
andnums[3]
by -1. Nownums = [1,1,1,1,1]
.
Example 2:
Input: nums = [-1,-1,-1,1,1,1], k = 5
Output: false
Explanation:
It is not possible to make all array elements equal in at most 5 operations.
Constraints:
1 <= n == nums.length <= 105
nums[i]
is either -1 or 1.1 <= k <= n
Solutions
Solution 1: Traversal and Counting
According to the problem description, to make all elements in the array equal, all elements must be either \(\textit{nums}[0]\) or \(-\textit{nums}[0]\). Therefore, we design a function \(\textit{check}\) to determine whether the array can be transformed into all elements equal to \(\textit{target}\) with at most \(k\) operations.
The idea of this function is to traverse the array and count the number of operations needed. Each element is either modified once or not at all. If the current element is equal to the target value, no modification is needed and we continue to the next element. If the current element is not equal to the target value, an operation is needed, increment the counter, and flip the sign, indicating that subsequent elements need the opposite operation.
After the traversal, if the counter is less than or equal to \(k\) and the sign of the last element matches the target value, return \(\textit{true}\); otherwise, return \(\textit{false}\).
The final answer is the result of \(\textit{check}(\textit{nums}[0], k)\) or \(\textit{check}(-\textit{nums}[0], k)\).
The time complexity is \(O(n)\), where \(n\) is the length of the array. The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|