forked from haoel/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MakeTwoArraysEqualByReversingSubArrays.cpp
76 lines (70 loc) · 2.17 KB
/
MakeTwoArraysEqualByReversingSubArrays.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Source : https://leetcode.com/problems/make-two-arrays-equal-by-reversing-sub-arrays/
// Author : Hao Chen
// Date : 2020-10-02
/*****************************************************************************************************
*
* 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: true
*
* Example 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.
*
* Example 5:
*
* Input: target = [1,1,1,1,1], arr = [1,1,1,1,1]
* Output: true
*
* Constraints:
*
* target.length == arr.length
* 1 <= target.length <= 1000
* 1 <= target[i] <= 1000
* 1 <= arr[i] <= 1000
******************************************************************************************************/
class Solution {
public:
// This problem could transfer to check two array has exactly same numbers
bool canBeEqual(vector<int>& target, vector<int>& arr) {
int len1 = target.size();
int len2 = arr.size();
if (len1 != len2) return false;
if (len1 == 0) return true;
unordered_map<int, int> stat;
for (int i=0; i<len1; i++) {
stat[target[i]]++;
stat[arr[i]]--;
}
for (auto& s:stat) {
if (s.second !=0 ) return false;
}
return true;
}
};