Skip to content

Commit bc7e890

Browse files
committed
feat: add solutions to lc problem: No.1460
No.1460.Make Two Arrays Equal by Reversing Sub-arrays
1 parent ca40e84 commit bc7e890

File tree

5 files changed

+207
-5
lines changed

5 files changed

+207
-5
lines changed

solution/1400-1499/1460.Make Two Arrays Equal by Reversing Sub-arrays/README.md

Lines changed: 101 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,23 @@
5555

5656
<!-- 这里可写通用的实现逻辑 -->
5757

58-
只要两数组元素均相同,那么就能通过翻转使得两个数组相等。
58+
**前言**
5959

60-
因此,对两数组进行排序,然后判断两数组是否相同即可。
60+
由于我们可以对 $arr$ 任意非空子数组进行翻转,也就意味着我们可以交换任何两个相邻元素,使得数组按特定的一种顺序排列。
61+
62+
因此,题目转换为:判断一个数组是否是另一个数组的排列。
63+
64+
**方法一:排序**
65+
66+
分别对数组 $arr$ 和 $target$ 排序,然后比较两数组对应位置的元素是否相等。相等则满足条件。
67+
68+
时间复杂度 $O(nlogn)$,空间复杂度 $O(logn)$。其中 $n$ 是数组 $arr$ 的长度,快排的平均递归深度为 $O(logn)$。
69+
70+
**方法二:数组/哈希表**
71+
72+
由于两数组的数据范围都是 $1 \leq x \leq 1000$,因此我们可以使用数组/哈希表来记录每个数字出现的次数。
73+
74+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。
6175

6276
<!-- tabs:start -->
6377

@@ -68,7 +82,15 @@
6882
```python
6983
class Solution:
7084
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
71-
return sorted(target) == sorted(arr)
85+
target.sort()
86+
arr.sort()
87+
return target == arr
88+
```
89+
90+
```python
91+
class Solution:
92+
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
93+
return Counter(target) == Counter(arr)
7294
```
7395

7496
### **Java**
@@ -85,6 +107,82 @@ class Solution {
85107
}
86108
```
87109

110+
```java
111+
class Solution {
112+
public boolean canBeEqual(int[] target, int[] arr) {
113+
int[] cnt1 = new int[1001];
114+
int[] cnt2 = new int[1001];
115+
for (int v : target) {
116+
++cnt1[v];
117+
}
118+
for (int v : arr) {
119+
++cnt2[v];
120+
}
121+
return Arrays.equals(cnt1, cnt2);
122+
}
123+
}
124+
```
125+
126+
### **C++**
127+
128+
```cpp
129+
class Solution {
130+
public:
131+
bool canBeEqual(vector<int>& target, vector<int>& arr) {
132+
sort(target.begin(), target.end());
133+
sort(arr.begin(), arr.end());
134+
return target == arr;
135+
}
136+
};
137+
```
138+
139+
```cpp
140+
class Solution {
141+
public:
142+
bool canBeEqual(vector<int>& target, vector<int>& arr) {
143+
vector<int> cnt1(1001);
144+
vector<int> cnt2(1001);
145+
for (int& v : target) ++cnt1[v];
146+
for (int& v : arr) ++cnt2[v];
147+
return cnt1 == cnt2;
148+
}
149+
};
150+
```
151+
152+
### **Go**
153+
154+
```go
155+
func canBeEqual(target []int, arr []int) bool {
156+
sort.Ints(target)
157+
sort.Ints(arr)
158+
for i, v := range target {
159+
if v != arr[i] {
160+
return false
161+
}
162+
}
163+
return true
164+
}
165+
```
166+
167+
```go
168+
func canBeEqual(target []int, arr []int) bool {
169+
cnt1 := make([]int, 1001)
170+
cnt2 := make([]int, 1001)
171+
for _, v := range target {
172+
cnt1[v]++
173+
}
174+
for _, v := range arr {
175+
cnt2[v]++
176+
}
177+
for i, v := range cnt1 {
178+
if v != cnt2[i] {
179+
return false
180+
}
181+
}
182+
return true
183+
}
184+
```
185+
88186
### **...**
89187

90188
```

solution/1400-1499/1460.Make Two Arrays Equal by Reversing Sub-arrays/README_EN.md

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,15 @@ There are multiple ways to convert arr to target, this is not the only way to do
5656
```python
5757
class Solution:
5858
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
59-
return sorted(target) == sorted(arr)
59+
target.sort()
60+
arr.sort()
61+
return target == arr
62+
```
63+
64+
```python
65+
class Solution:
66+
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
67+
return Counter(target) == Counter(arr)
6068
```
6169

6270
### **Java**
@@ -71,6 +79,82 @@ class Solution {
7179
}
7280
```
7381

82+
```java
83+
class Solution {
84+
public boolean canBeEqual(int[] target, int[] arr) {
85+
int[] cnt1 = new int[1001];
86+
int[] cnt2 = new int[1001];
87+
for (int v : target) {
88+
++cnt1[v];
89+
}
90+
for (int v : arr) {
91+
++cnt2[v];
92+
}
93+
return Arrays.equals(cnt1, cnt2);
94+
}
95+
}
96+
```
97+
98+
### **C++**
99+
100+
```cpp
101+
class Solution {
102+
public:
103+
bool canBeEqual(vector<int>& target, vector<int>& arr) {
104+
sort(target.begin(), target.end());
105+
sort(arr.begin(), arr.end());
106+
return target == arr;
107+
}
108+
};
109+
```
110+
111+
```cpp
112+
class Solution {
113+
public:
114+
bool canBeEqual(vector<int>& target, vector<int>& arr) {
115+
vector<int> cnt1(1001);
116+
vector<int> cnt2(1001);
117+
for (int& v : target) ++cnt1[v];
118+
for (int& v : arr) ++cnt2[v];
119+
return cnt1 == cnt2;
120+
}
121+
};
122+
```
123+
124+
### **Go**
125+
126+
```go
127+
func canBeEqual(target []int, arr []int) bool {
128+
sort.Ints(target)
129+
sort.Ints(arr)
130+
for i, v := range target {
131+
if v != arr[i] {
132+
return false
133+
}
134+
}
135+
return true
136+
}
137+
```
138+
139+
```go
140+
func canBeEqual(target []int, arr []int) bool {
141+
cnt1 := make([]int, 1001)
142+
cnt2 := make([]int, 1001)
143+
for _, v := range target {
144+
cnt1[v]++
145+
}
146+
for _, v := range arr {
147+
cnt2[v]++
148+
}
149+
for i, v := range cnt1 {
150+
if v != cnt2[i] {
151+
return false
152+
}
153+
}
154+
return true
155+
}
156+
```
157+
74158
### **...**
75159

76160
```
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution {
2+
public:
3+
bool canBeEqual(vector<int>& target, vector<int>& arr) {
4+
sort(target.begin(), target.end());
5+
sort(arr.begin(), arr.end());
6+
return target == arr;
7+
}
8+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
func canBeEqual(target []int, arr []int) bool {
2+
sort.Ints(target)
3+
sort.Ints(arr)
4+
for i, v := range target {
5+
if v != arr[i] {
6+
return false
7+
}
8+
}
9+
return true
10+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
class Solution:
22
def canBeEqual(self, target: List[int], arr: List[int]) -> bool:
3-
return sorted(target) == sorted(arr)
3+
target.sort()
4+
arr.sort()
5+
return target == arr

0 commit comments

Comments
 (0)