1460. Make Two Arrays Equal by Reversing Sub-arrays
Description
Given two integer arrays of equal length target and arr.
In one step, you can select any non-empty sub-array of arr and reverse it. You are allowed to make any number of steps.
Return True if you can make arr equal to target, or False otherwise.
Example 1:
Input: target = [1,2,3,4], arr = [2,4,1,3]
Output: true
Explanation: You can follow the next steps to convert arr to target:
1- Reverse sub-array [2,4,1], arr becomes [1,4,2,3]
2- Reverse sub-array [4,2], arr becomes [1,2,4,3]
3- Reverse sub-array [4,3], arr becomes [1,2,3,4]
There are multiple ways to convert arr to target, this is not the only way to do so.Example 2:
Input: target = [7], arr = [7]
Output: true
Explanation: arr is equal to target without any reverses.Example 3:
Input: target = [1,12], arr = [12,1]
Output: trueExample 4:
Input: target = [3,7,9], arr = [3,7,11]
Output: false
Explanation: arr doesn't have value 9 and it can never be converted to target.Constraints:
target.length == arr.length1 <= target.length <= 10001 <= target[i] <= 10001 <= arr[i] <= 1000
Tags
Array
Solution
Essentially, this problem is equivalent to check if both arrays share the same elements.
Solution 1:
Sort both arrays and check each pair of values.
Solution 2:
We can use a hash table to check if there is an element that only appears once. Return false if so.
Complexity
Solution 1:
Time complexity:
Space complexity: , which is equivalent to the space complexity of quick sort algorithm.
Solution 2:
Time complexity:
Space complexity: , as the range of element is given.
Code
Solution 1:
func canBeEqual(target []int, arr []int) bool {
var m [1001]int
for i := 0; i < len(target); i++ {
m[target[i]]++
m[arr[i]]--
}
for _, n := range m {
if n != 0 {
return false
}
}
return true
}Solution 2:
func canBeEqual1(target []int, arr []int) bool {
sort.Ints(target)
sort.Ints(arr)
for i := 0; i < len(target); i++ {
if target[i] != arr[i] {
return false
}
}
return true
}Last updated
Was this helpful?