Skip to content

Commit 2fd1c7b

Browse files
committed
feat: add solutions to lc problem: No.1640
No.1640.Check Array Formation Through Concatenation
1 parent 9226546 commit 2fd1c7b

File tree

4 files changed

+174
-10
lines changed

4 files changed

+174
-10
lines changed

solution/1600-1699/1640.Check Array Formation Through Concatenation/README.md

+92-4
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,15 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55-
**方法一:哈希表**
55+
**方法一:暴力枚举**
56+
57+
遍历 `arr`,在 `pieces` 中找到首元素等于当前 `arr[i]` 的数组项,如果找不到,直接返回 `false`
58+
59+
如果找到了,我们记数组项为 `pieces[k]`,然后继续往后遍历 `arr[i]``pieces[k]`,直至 `pieces[k]` 遍历完或者元素不等。
60+
61+
遍历结束,返回 `true`
62+
63+
**方法二:哈希表**
5664

5765
创建一个哈希表,键为 `pieces` 中每个数组项的首元素,值为数组项。
5866

@@ -68,6 +76,22 @@
6876

6977
<!-- 这里可写当前语言的特殊实现逻辑 -->
7078

79+
```python
80+
class Solution:
81+
def canFormArray(self, arr: List[int], pieces: List[List[int]]) -> bool:
82+
i = 0
83+
while i < len(arr):
84+
k = 0
85+
while k < len(pieces) and pieces[k][0] != arr[i]:
86+
k += 1
87+
if k == len(pieces):
88+
return False
89+
j = 0
90+
while j < len(pieces[k]) and arr[i] == pieces[k][j]:
91+
i, j = i + 1, j + 1
92+
return True
93+
```
94+
7195
```python
7296
class Solution:
7397
def canFormArray(self, arr: List[int], pieces: List[List[int]]) -> bool:
@@ -87,6 +111,28 @@ class Solution:
87111

88112
<!-- 这里可写当前语言的特殊实现逻辑 -->
89113

114+
```java
115+
class Solution {
116+
public boolean canFormArray(int[] arr, int[][] pieces) {
117+
for (int i = 0; i < arr.length;) {
118+
int k = 0;
119+
while (k < pieces.length && pieces[k][0] != arr[i]) {
120+
++k;
121+
}
122+
if (k == pieces.length) {
123+
return false;
124+
}
125+
int j = 0;
126+
while (j < pieces[k].length && arr[i] == pieces[k][j]) {
127+
++i;
128+
++j;
129+
}
130+
}
131+
return true;
132+
}
133+
}
134+
```
135+
90136
```java
91137
class Solution {
92138
public boolean canFormArray(int[] arr, int[][] pieces) {
@@ -98,7 +144,6 @@ class Solution {
98144
if (!d.containsKey(arr[i])) {
99145
return false;
100146
}
101-
var p = d.get(arr[i]);
102147
for (int v : d.get(arr[i])) {
103148
if (arr[i++] != v) {
104149
return false;
@@ -112,6 +157,31 @@ class Solution {
112157

113158
### **C++**
114159

160+
### **C++**
161+
162+
```cpp
163+
class Solution {
164+
public:
165+
bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) {
166+
for (int i = 0; i < arr.size();) {
167+
int k = 0;
168+
while (k < pieces.size() && pieces[k][0] != arr[i]) {
169+
++k;
170+
}
171+
if (k == pieces.size()) {
172+
return false;
173+
}
174+
int j = 0;
175+
while (j < pieces[k].size() && arr[i] == pieces[k][j]) {
176+
++i;
177+
++j;
178+
}
179+
}
180+
return true;
181+
}
182+
};
183+
```
184+
115185
```cpp
116186
class Solution {
117187
public:
@@ -124,8 +194,7 @@ public:
124194
if (!d.count(arr[i])) {
125195
return false;
126196
}
127-
auto& p = d[arr[i]];
128-
for (int& v : p) {
197+
for (int& v : d[arr[i]]) {
129198
if (arr[i++] != v) {
130199
return false;
131200
}
@@ -138,6 +207,25 @@ public:
138207

139208
### **Go**
140209

210+
```go
211+
func canFormArray(arr []int, pieces [][]int) bool {
212+
for i := 0; i < len(arr); {
213+
k := 0
214+
for k < len(pieces) && pieces[k][0] != arr[i] {
215+
k++
216+
}
217+
if k == len(pieces) {
218+
return false
219+
}
220+
j := 0
221+
for j < len(pieces[k]) && arr[i] == pieces[k][j] {
222+
i, j = i+1, j+1
223+
}
224+
}
225+
return true
226+
}
227+
```
228+
141229
```go
142230
func canFormArray(arr []int, pieces [][]int) bool {
143231
d := map[int][]int{}

solution/1600-1699/1640.Check Array Formation Through Concatenation/README_EN.md

+81-3
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,22 @@
5151

5252
### **Python3**
5353

54+
```python
55+
class Solution:
56+
def canFormArray(self, arr: List[int], pieces: List[List[int]]) -> bool:
57+
i = 0
58+
while i < len(arr):
59+
k = 0
60+
while k < len(pieces) and pieces[k][0] != arr[i]:
61+
k += 1
62+
if k == len(pieces):
63+
return False
64+
j = 0
65+
while j < len(pieces[k]) and arr[i] == pieces[k][j]:
66+
i, j = i + 1, j + 1
67+
return True
68+
```
69+
5470
```python
5571
class Solution:
5672
def canFormArray(self, arr: List[int], pieces: List[List[int]]) -> bool:
@@ -68,6 +84,28 @@ class Solution:
6884

6985
### **Java**
7086

87+
```java
88+
class Solution {
89+
public boolean canFormArray(int[] arr, int[][] pieces) {
90+
for (int i = 0; i < arr.length;) {
91+
int k = 0;
92+
while (k < pieces.length && pieces[k][0] != arr[i]) {
93+
++k;
94+
}
95+
if (k == pieces.length) {
96+
return false;
97+
}
98+
int j = 0;
99+
while (j < pieces[k].length && arr[i] == pieces[k][j]) {
100+
++i;
101+
++j;
102+
}
103+
}
104+
return true;
105+
}
106+
}
107+
```
108+
71109
```java
72110
class Solution {
73111
public boolean canFormArray(int[] arr, int[][] pieces) {
@@ -79,7 +117,6 @@ class Solution {
79117
if (!d.containsKey(arr[i])) {
80118
return false;
81119
}
82-
var p = d.get(arr[i]);
83120
for (int v : d.get(arr[i])) {
84121
if (arr[i++] != v) {
85122
return false;
@@ -93,6 +130,29 @@ class Solution {
93130

94131
### **C++**
95132

133+
```cpp
134+
class Solution {
135+
public:
136+
bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) {
137+
for (int i = 0; i < arr.size();) {
138+
int k = 0;
139+
while (k < pieces.size() && pieces[k][0] != arr[i]) {
140+
++k;
141+
}
142+
if (k == pieces.size()) {
143+
return false;
144+
}
145+
int j = 0;
146+
while (j < pieces[k].size() && arr[i] == pieces[k][j]) {
147+
++i;
148+
++j;
149+
}
150+
}
151+
return true;
152+
}
153+
};
154+
```
155+
96156
```cpp
97157
class Solution {
98158
public:
@@ -105,8 +165,7 @@ public:
105165
if (!d.count(arr[i])) {
106166
return false;
107167
}
108-
auto& p = d[arr[i]];
109-
for (int& v : p) {
168+
for (int& v : d[arr[i]]) {
110169
if (arr[i++] != v) {
111170
return false;
112171
}
@@ -119,6 +178,25 @@ public:
119178

120179
### **Go**
121180

181+
```go
182+
func canFormArray(arr []int, pieces [][]int) bool {
183+
for i := 0; i < len(arr); {
184+
k := 0
185+
for k < len(pieces) && pieces[k][0] != arr[i] {
186+
k++
187+
}
188+
if k == len(pieces) {
189+
return false
190+
}
191+
j := 0
192+
for j < len(pieces[k]) && arr[i] == pieces[k][j] {
193+
i, j = i+1, j+1
194+
}
195+
}
196+
return true
197+
}
198+
```
199+
122200
```go
123201
func canFormArray(arr []int, pieces [][]int) bool {
124202
d := map[int][]int{}

solution/1600-1699/1640.Check Array Formation Through Concatenation/Solution.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ class Solution {
99
if (!d.count(arr[i])) {
1010
return false;
1111
}
12-
auto& p = d[arr[i]];
13-
for (int& v : p) {
12+
for (int& v : d[arr[i]]) {
1413
if (arr[i++] != v) {
1514
return false;
1615
}

solution/1600-1699/1640.Check Array Formation Through Concatenation/Solution.java

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ public boolean canFormArray(int[] arr, int[][] pieces) {
88
if (!d.containsKey(arr[i])) {
99
return false;
1010
}
11-
var p = d.get(arr[i]);
1211
for (int v : d.get(arr[i])) {
1312
if (arr[i++] != v) {
1413
return false;

0 commit comments

Comments
 (0)