You are 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&nbsp;or false otherwise.

&nbsp;
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 = [3,7,9], arr = [3,7,11]
Output: false
Explanation: arr does not have value 9 and it can never be converted to target.


&nbsp;
Constraints:


	target.length == arr.length
	1 &lt;= target.length &lt;= 1000
	1 &lt;= target[i] &lt;= 1000
	1 &lt;= arr[i] &lt;= 1000


class Solution:
    def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
        target.sort()
        arr.sort()
        if len(target)==len(arr):
            if target==arr:
                return True
            else:
                return False
class Solution {
    public boolean canBeEqual(int[] target, int[] arr) {
        HashMap<Integer,Integer>hm1=new HashMap();
        for(int i: arr){
            if(hm1.containsKey(i))
                hm1.put(i,hm1.get(i)+1);
            else
                hm1.put(i,1);
        }
        for(int i: target){
            if(hm1.containsKey(i)){
                hm1.put(i,hm1.getOrDefault(i,0)-1);
                if(hm1.get(i)==0)
                    hm1.remove(i);
            }
            else
                return false;
            
        }
        if(hm1.size()==0)
            return true;
        
        return false;
    }
}
class Solution {
public:
    bool canBeEqual(vector<int>& target, vector<int>& arr) {
        int arr1[1001]={0};
        int arr2[1001]={0};
        
        for(int i =0 ; i<target.size(); i++)
        {
            arr1[arr[i]]++;
            arr2[target[i]]++;
        }
        
        for(int i =0 ;i<=1000;i++)
        {
            if(arr1[i]!=arr2[i])
                return false;
        }
        return true;
    }
};
var canBeEqual = function(target, arr) {
    if(arr.length==1){
        if(arr[0]===target[0]){
            return true
        }
    }
    let obj = {}
    for(let i =0;i<arr.length; i ++){
        if(obj[arr[i]]==undefined){
            obj[arr[i]]=1
        }else{
            obj[arr[i]]++
        }
    }
    for(let i =0;i<target.length; i ++){
        if(obj[target[i]]==undefined){
            return false
        }else{
            obj[target[i]]++
        }
    }
   let result = Object.values(obj)
   
   for(let i =0; i <result.length; i ++){
       if(result[i]%2!==0){
           return false
       }
   }
    return true
};
Make Two Arrays Equal by Reversing Sub-arrays