Problem
You are given an integer array nums
and an integer x
. In one operation, you can either remove the leftmost or the rightmost element from the array nums
and subtract its value from x
. Note that this modifies the array for future operations.
Return **the *minimum number* of operations to reduce **x
**to *exactly 0
*if it is possible, otherwise, return **-1
.
Example 1:
Input: nums = [1,1,4,2,3], x = 5
Output: 2
Explanation: The optimal solution is to remove the last two elements to reduce x to zero.
Example 2:
Input: nums = [5,6,7,8,9], x = 4
Output: -1
Example 3:
Input: nums = [3,2,20,1,1,3], x = 10
Output: 5
Explanation: The optimal solution is to remove the last three elements and the first two elements (5 operations in total) to reduce x to zero.
Constraints:
1 <= nums.length <= 10^5
1 <= nums[i] <= 10^4
1 <= x <= 10^9
Solution (Java)
class Solution {
public int minOperations(int[] nums, int x) {
int totalArraySum = 0;
for (int each : nums) {
totalArraySum += each;
}
if (totalArraySum == x) {
return nums.length;
}
int target = totalArraySum - x;
// as we need to find value equal to x so that x-x=0,
// and we need to search the longest sub array with sum equal t0 total array sum -x;
int sum = 0;
int result = -1;
int start = 0;
for (int end = 0; end < nums.length; end++) {
sum += nums[end];
while (sum > target && start < nums.length) {
sum -= nums[start];
start++;
}
if (sum == target) {
result = Math.max(result, end + 1 - start);
}
}
if (result == -1) {
return result;
} else {
return nums.length - result;
}
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).