You are given two integer arrays of equal length target and arr. In one step, you can select any non-empty subarray 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 subarray [2,4,1], arr becomes [1,4,2,3] 2- Reverse subarray [4,2], arr becomes [1,2,4,3] 3- Reverse subarray [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 = [3,7,9], arr = [3,7,11] Output: false Explanation: arr does not have value 9 and it can never be converted to target.
Constraints:
target.length == arr.length1 <= target.length <= 10001 <= target[i] <= 10001 <= arr[i] <= 1000class Solution {
public boolean canBeEqual(int[] target, int[] arr) {
Map<Integer, Integer> freq = new HashMap<>();
for (int i : target)
freq.put(i, freq.getOrDefault(i, 0) + 1);
for (int i : arr) {
if (!freq.containsKey(i))
return false;
freq.put(i, freq.get(i) - 1);
if (freq.get(i) == 0)
freq.remove(i);
}
return freq.size() == 0;
}
}class Solution {
public boolean canBeEqual(int[] target, int[] arr) {
Arrays.sort(target);
Arrays.sort(arr);
for(int i=0; i<target.length; i++)
if(target[i]!=arr[i])
return false;
return true;
}
}class Solution {
public boolean canBeEqual(int[] target, int[] arr) {
int[] freq = new int[1001];
for (int i = 0; i < target.length; i++) {
freq[target[i]]++;
freq[arr[i]]--;
}
for (int i = 0; i < target.length; i++)
if (freq[target[i]] != 0 || freq[arr[i]] != 0)
return false;
return true;
}
}