Skip to content

Commit a3c9b37

Browse files
committed
feat: add solutions to lc problem: No.1764
No.1764.Form Array by Concatenating Subarrays of Another Array
1 parent 6eed8f8 commit a3c9b37

File tree

6 files changed

+287
-2
lines changed

6 files changed

+287
-2
lines changed

solution/1700-1799/1764.Form Array by Concatenating Subarrays of Another Array/README.md

+104-1
Original file line numberDiff line numberDiff line change
@@ -59,22 +59,125 @@
5959

6060
<!-- 这里可写通用的实现逻辑 -->
6161

62+
**方法一:贪心枚举**
63+
64+
我们贪心地枚举 `nums` 中每一个数 $nums[j]$ 作为子数组的开始,判断其是否与当前 $groups[i]$ 匹配,是则将指针 $i$ 往后移一位,将指针 $j$ 往后移动 $groups[i].length$ 位,否则将指针 $j$ 往后移动一位。
65+
66+
如果 $i$ 走到了 $groups.length$,说明所有的子数组都匹配上了,返回 `true`,否则返回 `false`
67+
68+
时间复杂度 $O(n \times m),空间复杂度 O(1)$。其中 $n$ 和 $m$ 分别为 `groups``nums` 的长度。
69+
6270
<!-- tabs:start -->
6371

6472
### **Python3**
6573

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

6876
```python
69-
77+
class Solution:
78+
def canChoose(self, groups: List[List[int]], nums: List[int]) -> bool:
79+
n, m = len(groups), len(nums)
80+
i = j = 0
81+
while i < n and j < m:
82+
g = groups[i]
83+
if g == nums[j : j + len(g)]:
84+
j += len(g)
85+
i += 1
86+
else:
87+
j += 1
88+
return i == n
7089
```
7190

7291
### **Java**
7392

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

7695
```java
96+
class Solution {
97+
public boolean canChoose(int[][] groups, int[] nums) {
98+
int n = groups.length, m = nums.length;
99+
int i = 0;
100+
for (int j = 0; i < n && j < m;) {
101+
if (check(groups[i], nums, j)) {
102+
j += groups[i].length;
103+
++i;
104+
} else {
105+
++j;
106+
}
107+
}
108+
return i == n;
109+
}
110+
111+
private boolean check(int[] a, int[] b, int j) {
112+
int m = a.length, n = b.length;
113+
int i = 0;
114+
for (; i < m && j < n; ++i, ++j) {
115+
if (a[i] != b[j]) {
116+
return false;
117+
}
118+
}
119+
return i == m;
120+
}
121+
}
122+
```
123+
124+
### **C++**
125+
126+
```cpp
127+
class Solution {
128+
public:
129+
bool canChoose(vector<vector<int>>& groups, vector<int>& nums) {
130+
auto check = [&](vector<int>& a, vector<int>& b, int j) {
131+
int m = a.size(), n = b.size();
132+
int i = 0;
133+
for (; i < m && j < n; ++i, ++j) {
134+
if (a[i] != b[j]) {
135+
return false;
136+
}
137+
}
138+
return i == m;
139+
};
140+
int n = groups.size(), m = nums.size();
141+
int i = 0;
142+
for (int j = 0; i < n && j < m;) {
143+
if (check(groups[i], nums, j)) {
144+
j += groups[i].size();
145+
++i;
146+
} else {
147+
++j;
148+
}
149+
}
150+
return i == n;
151+
}
152+
};
153+
```
77154
155+
### **Go**
156+
157+
```go
158+
func canChoose(groups [][]int, nums []int) bool {
159+
check := func(a, b []int, j int) bool {
160+
m, n := len(a), len(b)
161+
i := 0
162+
for ; i < m && j < n; i, j = i+1, j+1 {
163+
if a[i] != b[j] {
164+
return false
165+
}
166+
}
167+
return i == m
168+
}
169+
n, m := len(groups), len(nums)
170+
i := 0
171+
for j := 0; i < n && j < m; {
172+
if check(groups[i], nums, j) {
173+
j += len(groups[i])
174+
i++
175+
} else {
176+
j++
177+
}
178+
}
179+
return i == n
180+
}
78181
```
79182

80183
### **...**

solution/1700-1799/1764.Form Array by Concatenating Subarrays of Another Array/README_EN.md

+96-1
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,108 @@ They share a common elements nums[4] (0-indexed).
5858
### **Python3**
5959

6060
```python
61-
61+
class Solution:
62+
def canChoose(self, groups: List[List[int]], nums: List[int]) -> bool:
63+
n, m = len(groups), len(nums)
64+
i = j = 0
65+
while i < n and j < m:
66+
g = groups[i]
67+
if g == nums[j : j + len(g)]:
68+
j += len(g)
69+
i += 1
70+
else:
71+
j += 1
72+
return i == n
6273
```
6374

6475
### **Java**
6576

6677
```java
78+
class Solution {
79+
public boolean canChoose(int[][] groups, int[] nums) {
80+
int n = groups.length, m = nums.length;
81+
int i = 0;
82+
for (int j = 0; i < n && j < m;) {
83+
if (check(groups[i], nums, j)) {
84+
j += groups[i].length;
85+
++i;
86+
} else {
87+
++j;
88+
}
89+
}
90+
return i == n;
91+
}
92+
93+
private boolean check(int[] a, int[] b, int j) {
94+
int m = a.length, n = b.length;
95+
int i = 0;
96+
for (; i < m && j < n; ++i, ++j) {
97+
if (a[i] != b[j]) {
98+
return false;
99+
}
100+
}
101+
return i == m;
102+
}
103+
}
104+
```
105+
106+
### **C++**
107+
108+
```cpp
109+
class Solution {
110+
public:
111+
bool canChoose(vector<vector<int>>& groups, vector<int>& nums) {
112+
auto check = [&](vector<int>& a, vector<int>& b, int j) {
113+
int m = a.size(), n = b.size();
114+
int i = 0;
115+
for (; i < m && j < n; ++i, ++j) {
116+
if (a[i] != b[j]) {
117+
return false;
118+
}
119+
}
120+
return i == m;
121+
};
122+
int n = groups.size(), m = nums.size();
123+
int i = 0;
124+
for (int j = 0; i < n && j < m;) {
125+
if (check(groups[i], nums, j)) {
126+
j += groups[i].size();
127+
++i;
128+
} else {
129+
++j;
130+
}
131+
}
132+
return i == n;
133+
}
134+
};
135+
```
67136
137+
### **Go**
138+
139+
```go
140+
func canChoose(groups [][]int, nums []int) bool {
141+
check := func(a, b []int, j int) bool {
142+
m, n := len(a), len(b)
143+
i := 0
144+
for ; i < m && j < n; i, j = i+1, j+1 {
145+
if a[i] != b[j] {
146+
return false
147+
}
148+
}
149+
return i == m
150+
}
151+
n, m := len(groups), len(nums)
152+
i := 0
153+
for j := 0; i < n && j < m; {
154+
if check(groups[i], nums, j) {
155+
j += len(groups[i])
156+
i++
157+
} else {
158+
j++
159+
}
160+
}
161+
return i == n
162+
}
68163
```
69164

70165
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public:
3+
bool canChoose(vector<vector<int>>& groups, vector<int>& nums) {
4+
auto check = [&](vector<int>& a, vector<int>& b, int j) {
5+
int m = a.size(), n = b.size();
6+
int i = 0;
7+
for (; i < m && j < n; ++i, ++j) {
8+
if (a[i] != b[j]) {
9+
return false;
10+
}
11+
}
12+
return i == m;
13+
};
14+
int n = groups.size(), m = nums.size();
15+
int i = 0;
16+
for (int j = 0; i < n && j < m;) {
17+
if (check(groups[i], nums, j)) {
18+
j += groups[i].size();
19+
++i;
20+
} else {
21+
++j;
22+
}
23+
}
24+
return i == n;
25+
}
26+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
func canChoose(groups [][]int, nums []int) bool {
2+
check := func(a, b []int, j int) bool {
3+
m, n := len(a), len(b)
4+
i := 0
5+
for ; i < m && j < n; i, j = i+1, j+1 {
6+
if a[i] != b[j] {
7+
return false
8+
}
9+
}
10+
return i == m
11+
}
12+
n, m := len(groups), len(nums)
13+
i := 0
14+
for j := 0; i < n && j < m; {
15+
if check(groups[i], nums, j) {
16+
j += len(groups[i])
17+
i++
18+
} else {
19+
j++
20+
}
21+
}
22+
return i == n
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public boolean canChoose(int[][] groups, int[] nums) {
3+
int n = groups.length, m = nums.length;
4+
int i = 0;
5+
for (int j = 0; i < n && j < m;) {
6+
if (check(groups[i], nums, j)) {
7+
j += groups[i].length;
8+
++i;
9+
} else {
10+
++j;
11+
}
12+
}
13+
return i == n;
14+
}
15+
16+
private boolean check(int[] a, int[] b, int j) {
17+
int m = a.length, n = b.length;
18+
int i = 0;
19+
for (; i < m && j < n; ++i, ++j) {
20+
if (a[i] != b[j]) {
21+
return false;
22+
}
23+
}
24+
return i == m;
25+
}
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def canChoose(self, groups: List[List[int]], nums: List[int]) -> bool:
3+
n, m = len(groups), len(nums)
4+
i = j = 0
5+
while i < n and j < m:
6+
g = groups[i]
7+
if g == nums[j : j + len(g)]:
8+
j += len(g)
9+
i += 1
10+
else:
11+
j += 1
12+
return i == n

0 commit comments

Comments
 (0)