1658. Minimum Operations to Reduce X to Zero
Medium
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's 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 <= 105
1 <= nums[i] <= 104
1 <= x <= 109
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 | class Solution { public int minOperations(int[] nums, int x) { int target = 0; for(int i : nums) target += i; target -= x; int n = nums.length; if(target==0) return n; Map<Integer, Integer> map = new HashMap<>(); map.put(0, -1); int sum = 0; int maxLen = -1; for(int i=0; i<n; ++i){ sum += nums[i]; int diff = sum-target; if(map.containsKey(diff)){ int len = i-map.get(diff); maxLen = Math.max(maxLen, len); } if(!map.containsKey(sum)) map.put(sum, i); } return maxLen==-1?-1:n-maxLen; } } |
No comments:
Post a Comment