Welcome to Subscribe On Youtube
3810. Minimum Operations to Reach Target Array
Description
You are given two integer arrays nums and target, each of length n, where nums[i] is the current value at index i and target[i] is the desired value at index i.
You may perform the following operation any number of times (including zero):
- Choose an integer value
x - Find all maximal contiguous segments where
nums[i] == x(a segment is maximal if it cannot be extended to the left or right while keeping all values equal tox) - For each such segment
[l, r], update simultaneously:nums[l] = target[l], nums[l + 1] = target[l + 1], ..., nums[r] = target[r]
Return the minimum number of operations required to make nums equal to target.
Example 1:
Input: nums = [1,2,3], target = [2,1,3]
Output: 2
Explanation:
- Choose
x = 1: maximal segment[0, 0]updated -> nums becomes[2, 2, 3] - Choose
x = 2: maximal segment[0, 1]updated (nums[0]stays 2,nums[1]becomes 1) ->numsbecomes[2, 1, 3] - Thus, 2 operations are required to convert
numstotarget.
Example 2:
Input: nums = [4,1,4], target = [5,1,4]
Output: 1
Explanation:
- Choose
x = 4: maximal segments[0, 0]and[2, 2]updated (nums[2]stays 4) ->numsbecomes[5, 1, 4] - Thus, 1 operation is required to convert
numstotarget.
Example 3:
Input: nums = [7,3,7], target = [5,5,9]
Output: 2
Explanation:
- Choose
x = 7: maximal segments[0, 0]and[2, 2]updated ->numsbecomes[5, 3, 9] - Choose
x = 3: maximal segment[1, 1]updated ->numsbecomes[5, 5, 9] - Thus, 2 operations are required to convert
numstotarget.
Constraints:
1 <= n == nums.length == target.length <= 1051 <= nums[i], target[i] <= 105
Solutions
Solution 1: Hash Table
According to the problem description, we only need to count the number of distinct $\text{nums}[i]$ where $\text{nums}[i] \ne \text{target}[i]$. Therefore, we can use a hash table to store these distinct $\text{nums}[i]$ and finally return the size of the hash table.
The time complexity is $O(n)$, and the space complexity is $O(n)$, where $n$ is the length of the array.
-
class Solution { public int minOperations(int[] nums, int[] target) { Set<Integer> s = new HashSet<>(); for (int i = 0; i < nums.length; ++i) { if (nums[i] != target[i]) { s.add(nums[i]); } } return s.size(); } } -
class Solution { public: int minOperations(vector<int>& nums, vector<int>& target) { unordered_set<int> s; for (int i = 0; i < nums.size(); ++i) { if (nums[i] != target[i]) { s.insert(nums[i]); } } return s.size(); } }; -
class Solution: def minOperations(self, nums: List[int], target: List[int]) -> int: s = {x for x, y in zip(nums, target) if x != y} return len(s) -
func minOperations(nums []int, target []int) int { s := make(map[int]struct{}) for i := 0; i < len(nums); i++ { if nums[i] != target[i] { s[nums[i]] = struct{}{} } } return len(s) } -
function minOperations(nums: number[], target: number[]): number { const s = new Set<number>(); for (let i = 0; i < nums.length; i++) { if (nums[i] !== target[i]) { s.add(nums[i]); } } return s.size; }