Skip to content

Commit da89fc3

Browse files
committed
feat: add solutions to lc problem: No.0718
No.0718.Maximum Length of Repeated Subarray
1 parent 0301dcc commit da89fc3

File tree

9 files changed

+211
-12
lines changed

9 files changed

+211
-12
lines changed

solution/0700-0799/0718.Maximum Length of Repeated Subarray/README.md

+78-1
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,99 @@
3838

3939
<!-- 这里可写通用的实现逻辑 -->
4040

41+
**方法一:动态规划**
42+
4143
<!-- tabs:start -->
4244

4345
### **Python3**
4446

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

4749
```python
48-
50+
class Solution:
51+
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
52+
m, n = len(nums1), len(nums2)
53+
dp = [[0] * (n + 1) for _ in range(m + 1)]
54+
ans = 0
55+
for i in range(1, m + 1):
56+
for j in range(1, n + 1):
57+
if nums1[i - 1] == nums2[j - 1]:
58+
dp[i][j] = 1 + dp[i - 1][j - 1]
59+
ans = max(ans, dp[i][j])
60+
return ans
4961
```
5062

5163
### **Java**
5264

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

5567
```java
68+
class Solution {
69+
public int findLength(int[] nums1, int[] nums2) {
70+
int m = nums1.length;
71+
int n = nums2.length;
72+
int[][] dp = new int[m + 1][n + 1];
73+
int ans = 0;
74+
for (int i = 1; i <= m; ++i) {
75+
for (int j = 1; j <= n; ++j) {
76+
if (nums1[i - 1] == nums2[j - 1]) {
77+
dp[i][j] = dp[i - 1][j - 1] + 1;
78+
ans = Math.max(ans, dp[i][j]);
79+
}
80+
}
81+
}
82+
return ans;
83+
}
84+
}
85+
```
86+
87+
### **C++**
88+
89+
```cpp
90+
class Solution {
91+
public:
92+
int findLength(vector<int>& nums1, vector<int>& nums2) {
93+
int m = nums1.size(), n = nums2.size();
94+
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
95+
int ans = 0;
96+
for (int i = 1; i <= m; ++i)
97+
{
98+
for (int j = 1; j <= n; ++j)
99+
{
100+
if (nums1[i - 1] == nums2[j - 1])
101+
{
102+
dp[i][j] = dp[i - 1][j - 1] + 1;
103+
ans = max(ans, dp[i][j]);
104+
}
105+
}
106+
}
107+
return ans;
108+
}
109+
};
110+
```
56111
112+
### **Go**
113+
114+
```go
115+
func findLength(nums1 []int, nums2 []int) int {
116+
m, n := len(nums1), len(nums2)
117+
dp := make([][]int, m+1)
118+
for i := range dp {
119+
dp[i] = make([]int, n+1)
120+
}
121+
ans := 0
122+
for i := 1; i <= m; i++ {
123+
for j := 1; j <= n; j++ {
124+
if nums1[i-1] == nums2[j-1] {
125+
dp[i][j] = dp[i-1][j-1] + 1
126+
if ans < dp[i][j] {
127+
ans = dp[i][j]
128+
}
129+
}
130+
}
131+
}
132+
return ans
133+
}
57134
```
58135

59136
### **...**

solution/0700-0799/0718.Maximum Length of Repeated Subarray/README_EN.md

+76-1
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,88 @@
3737
### **Python3**
3838

3939
```python
40-
40+
class Solution:
41+
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
42+
m, n = len(nums1), len(nums2)
43+
dp = [[0] * (n + 1) for _ in range(m + 1)]
44+
ans = 0
45+
for i in range(1, m + 1):
46+
for j in range(1, n + 1):
47+
if nums1[i - 1] == nums2[j - 1]:
48+
dp[i][j] = 1 + dp[i - 1][j - 1]
49+
ans = max(ans, dp[i][j])
50+
return ans
4151
```
4252

4353
### **Java**
4454

4555
```java
56+
class Solution {
57+
public int findLength(int[] nums1, int[] nums2) {
58+
int m = nums1.length;
59+
int n = nums2.length;
60+
int[][] dp = new int[m + 1][n + 1];
61+
int ans = 0;
62+
for (int i = 1; i <= m; ++i) {
63+
for (int j = 1; j <= n; ++j) {
64+
if (nums1[i - 1] == nums2[j - 1]) {
65+
dp[i][j] = dp[i - 1][j - 1] + 1;
66+
ans = Math.max(ans, dp[i][j]);
67+
}
68+
}
69+
}
70+
return ans;
71+
}
72+
}
73+
```
74+
75+
### **C++**
76+
77+
```cpp
78+
class Solution {
79+
public:
80+
int findLength(vector<int>& nums1, vector<int>& nums2) {
81+
int m = nums1.size(), n = nums2.size();
82+
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
83+
int ans = 0;
84+
for (int i = 1; i <= m; ++i)
85+
{
86+
for (int j = 1; j <= n; ++j)
87+
{
88+
if (nums1[i - 1] == nums2[j - 1])
89+
{
90+
dp[i][j] = dp[i - 1][j - 1] + 1;
91+
ans = max(ans, dp[i][j]);
92+
}
93+
}
94+
}
95+
return ans;
96+
}
97+
};
98+
```
4699
100+
### **Go**
101+
102+
```go
103+
func findLength(nums1 []int, nums2 []int) int {
104+
m, n := len(nums1), len(nums2)
105+
dp := make([][]int, m+1)
106+
for i := range dp {
107+
dp[i] = make([]int, n+1)
108+
}
109+
ans := 0
110+
for i := 1; i <= m; i++ {
111+
for j := 1; j <= n; j++ {
112+
if nums1[i-1] == nums2[j-1] {
113+
dp[i][j] = dp[i-1][j-1] + 1
114+
if ans < dp[i][j] {
115+
ans = dp[i][j]
116+
}
117+
}
118+
}
119+
}
120+
return ans
121+
}
47122
```
48123

49124
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int findLength(vector<int>& nums1, vector<int>& nums2) {
4+
int m = nums1.size(), n = nums2.size();
5+
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
6+
int ans = 0;
7+
for (int i = 1; i <= m; ++i)
8+
{
9+
for (int j = 1; j <= n; ++j)
10+
{
11+
if (nums1[i - 1] == nums2[j - 1])
12+
{
13+
dp[i][j] = dp[i - 1][j - 1] + 1;
14+
ans = max(ans, dp[i][j]);
15+
}
16+
}
17+
}
18+
return ans;
19+
}
20+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
func findLength(nums1 []int, nums2 []int) int {
2+
m, n := len(nums1), len(nums2)
3+
dp := make([][]int, m+1)
4+
for i := range dp {
5+
dp[i] = make([]int, n+1)
6+
}
7+
ans := 0
8+
for i := 1; i <= m; i++ {
9+
for j := 1; j <= n; j++ {
10+
if nums1[i-1] == nums2[j-1] {
11+
dp[i][j] = dp[i-1][j-1] + 1
12+
if ans < dp[i][j] {
13+
ans = dp[i][j]
14+
}
15+
}
16+
}
17+
}
18+
return ans
19+
}

solution/0700-0799/0718.Maximum Length of Repeated Subarray/Solution.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
class Solution {
2-
public int findLength(int[] A, int[] B) {
2+
public int findLength(int[] nums1, int[] nums2) {
3+
int m = nums1.length;
4+
int n = nums2.length;
5+
int[][] dp = new int[m + 1][n + 1];
36
int ans = 0;
4-
int[][] dp = new int[A.length + 1][B.length + 1];
5-
for (int i = 1;i <= A.length;i++) {
6-
for (int j = 1;j <= B.length;j++) {
7-
if (A[i - 1] == B[j - 1]) {
7+
for (int i = 1; i <= m; ++i) {
8+
for (int j = 1; j <= n; ++j) {
9+
if (nums1[i - 1] == nums2[j - 1]) {
810
dp[i][j] = dp[i - 1][j - 1] + 1;
911
ans = Math.max(ans, dp[i][j]);
10-
} else {
11-
dp[i][j] = 0;
1212
}
1313
}
1414
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def findLength(self, nums1: List[int], nums2: List[int]) -> int:
3+
m, n = len(nums1), len(nums2)
4+
dp = [[0] * (n + 1) for _ in range(m + 1)]
5+
ans = 0
6+
for i in range(1, m + 1):
7+
for j in range(1, n + 1):
8+
if nums1[i - 1] == nums2[j - 1]:
9+
dp[i][j] = 1 + dp[i - 1][j - 1]
10+
ans = max(ans, dp[i][j])
11+
return ans

solution/2000-2099/2070.Most Beautiful Item for Each Query/README.md

-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@
7272
class Solution:
7373
def maximumBeauty(self, items: List[List[int]], queries: List[int]) -> List[int]:
7474
items.sort()
75-
n = len(items)
7675
prices = [p for p, _ in items]
7776
mx = [items[0][1]]
7877
for _, b in items[1:]:

solution/2000-2099/2070.Most Beautiful Item for Each Query/README_EN.md

-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ Hence, the answer to the query is 0.
6565
class Solution:
6666
def maximumBeauty(self, items: List[List[int]], queries: List[int]) -> List[int]:
6767
items.sort()
68-
n = len(items)
6968
prices = [p for p, _ in items]
7069
mx = [items[0][1]]
7170
for _, b in items[1:]:

solution/2000-2099/2070.Most Beautiful Item for Each Query/Solution.py

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
class Solution:
22
def maximumBeauty(self, items: List[List[int]], queries: List[int]) -> List[int]:
33
items.sort()
4-
n = len(items)
54
prices = [p for p, _ in items]
65
mx = [items[0][1]]
76
for _, b in items[1:]:

0 commit comments

Comments
 (0)