# 1460. Make Two Arrays Equal by Reversing Subarrays ### Difficulty: Easy 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. #### Topic: Array, Hash Table, Sorting ### 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.length 1 <= target.length <= 1000 1 <= target[i] <= 1000 1 <= arr[i] <= 1000 ``` ## 解題思路 根據題目,我們能在 **arr** 字串中選擇任意長度的子陣列來做 **reverse**, 在 **target.length == arr.length** 的情況下,我們只需要確認兩個字串包含的元素相等即可判斷是否能構成相同陣列。 #### Answer 1: Sorting Array Time complexity: O(nlogn) ![](https://i.imgur.com/vr3l20y.png) <!-- Space complexity: O(1) --> ``` function canBeEqual(target: number[], arr: number[]): boolean { return target.sort().join('') === arr.sort().join(''); }; ``` #### Answer 2: Hash Table Time complexity: O(n) Space complexity: O(n) ![](https://i.imgur.com/6H9s0WU.png) ``` function canBeEqual(target: number[], arr: number[]): boolean { const charCount = new Object(); for (let index = 0; index < target.length; index++) { charCount[target[index]] = (charCount[target[index]] || 0) + 1; charCount[arr[index]] = (charCount[arr[index]] || 0) - 1; } for (const key in charCount) { if (charCount[key] !== 0) return false; } return true; }; ```