Skip to content

3229. Minimum Operations to Make Array Equal to Target 👍

  • Time: $O(n)$
  • Space: $O(1)$
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
 public:
  // Similar to 1526. Minimum Number of Increments on Subarrays to Form a Target
  // Array
  long long minimumOperations(vector<int>& nums, vector<int>& target) {
    long ans = abs(nums[0] - target[0]);

    for (int i = 1; i < nums.size(); ++i) {
      const int currDiff = target[i] - nums[i];
      const int prevDiff = target[i - 1] - nums[i - 1];
      if (currDiff >= 0 && prevDiff >= 0)
        ans += max(0, currDiff - prevDiff);
      else if (currDiff <= 0 && prevDiff <= 0)
        ans += max(0, abs(currDiff) - abs(prevDiff));
      else
        ans += abs(currDiff);
    }

    return ans;
  }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Solution {
  // Similar to 1526. Minimum Number of Increments on Subarrays to Form a Target Array
  public long minimumOperations(int[] nums, int[] target) {
    long ans = Math.abs((long) nums[0] - target[0]);

    for (int i = 1; i < nums.length; ++i) {
      final int currDiff = target[i] - nums[i];
      final int prevDiff = target[i - 1] - nums[i - 1];
      if (currDiff >= 0 && prevDiff >= 0)
        ans += Math.max(0, currDiff - prevDiff);
      else if (currDiff <= 0 && prevDiff <= 0)
        ans += Math.max(0, Math.abs((long) currDiff) - Math.abs((long) prevDiff));
      else
        ans += Math.abs((long) currDiff);
    }

    return ans;
  }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class Solution:
  # Similar to 1526. Minimum Number of Increments on Subarrays to Form a Target Array
  def minimumOperations(self, nums: list[int], target: list[int]) -> int:
    ans = abs(nums[0] - target[0])

    for (prevNum, prevTarget), (currNum, currTarget) in (
        itertools.pairwise(zip(nums, target))
    ):
      currDiff = currTarget - currNum
      prevDiff = prevTarget - prevNum
      if currDiff >= 0 and prevDiff >= 0:
        ans += max(0, currDiff - prevDiff)
      elif currDiff <= 0 and prevDiff <= 0:
        ans += max(0, abs(currDiff) - abs(prevDiff))
      else:
        ans += abs(currDiff)

    return ans