Skip to content

Commit 45410c9

Browse files
committed
feat: add solutions to lc problem: No.0325
No.0325.Maximum Size Subarray Sum Equals k
1 parent 941be85 commit 45410c9

File tree

6 files changed

+215
-2
lines changed

6 files changed

+215
-2
lines changed

solution/0300-0399/0325.Maximum Size Subarray Sum Equals k/README.md

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,97 @@
3131

3232
<!-- 这里可写通用的实现逻辑 -->
3333

34+
哈希表 + 前缀和。
35+
3436
<!-- tabs:start -->
3537

3638
### **Python3**
3739

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

4042
```python
41-
43+
class Solution:
44+
def maxSubArrayLen(self, nums: List[int], k: int) -> int:
45+
mp = {0: -1}
46+
s = ans = 0
47+
for i, v in enumerate(nums):
48+
s += v
49+
if s - k in mp:
50+
ans = max(ans, i - mp[s - k])
51+
if s not in mp:
52+
mp[s] = i
53+
return ans
4254
```
4355

4456
### **Java**
4557

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

4860
```java
61+
class Solution {
62+
public int maxSubArrayLen(int[] nums, int k) {
63+
Map<Integer, Integer> mp = new HashMap<>();
64+
mp.put(0, -1);
65+
int s = 0;
66+
int ans = 0;
67+
for (int i = 0; i < nums.length; ++i) {
68+
s += nums[i];
69+
if (mp.containsKey(s - k)) {
70+
ans = Math.max(ans, i - mp.get(s - k));
71+
}
72+
if (!mp.containsKey(s)) {
73+
mp.put(s, i);
74+
}
75+
}
76+
return ans;
77+
}
78+
}
79+
```
80+
81+
### **C++**
82+
83+
```cpp
84+
class Solution {
85+
public:
86+
int maxSubArrayLen(vector<int>& nums, int k) {
87+
unordered_map<int, int> mp;
88+
mp[0] = -1;
89+
int s = 0, ans = 0;
90+
for (int i = 0; i < nums.size(); ++i)
91+
{
92+
s += nums[i];
93+
if (mp.count(s - k)) ans = max(ans, i - mp[s - k]);
94+
if (!mp.count(s)) mp[s] = i;
95+
}
96+
return ans;
97+
}
98+
};
99+
```
49100
101+
### **Go**
102+
103+
```go
104+
func maxSubArrayLen(nums []int, k int) int {
105+
mp := map[int]int{0: -1}
106+
s, ans := 0, 0
107+
for i, v := range nums {
108+
s += v
109+
if j, ok := mp[s-k]; ok {
110+
ans = max(ans, i-j)
111+
}
112+
if _, ok := mp[s]; !ok {
113+
mp[s] = i
114+
}
115+
}
116+
return ans
117+
}
118+
119+
func max(a, b int) int {
120+
if a > b {
121+
return a
122+
}
123+
return b
124+
}
50125
```
51126

52127
### **...**

solution/0300-0399/0325.Maximum Size Subarray Sum Equals k/README_EN.md

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,86 @@
4242
### **Python3**
4343

4444
```python
45-
45+
class Solution:
46+
def maxSubArrayLen(self, nums: List[int], k: int) -> int:
47+
mp = {0: -1}
48+
s = ans = 0
49+
for i, v in enumerate(nums):
50+
s += v
51+
if s - k in mp:
52+
ans = max(ans, i - mp[s - k])
53+
if s not in mp:
54+
mp[s] = i
55+
return ans
4656
```
4757

4858
### **Java**
4959

5060
```java
61+
class Solution {
62+
public int maxSubArrayLen(int[] nums, int k) {
63+
Map<Integer, Integer> mp = new HashMap<>();
64+
mp.put(0, -1);
65+
int s = 0;
66+
int ans = 0;
67+
for (int i = 0; i < nums.length; ++i) {
68+
s += nums[i];
69+
if (mp.containsKey(s - k)) {
70+
ans = Math.max(ans, i - mp.get(s - k));
71+
}
72+
if (!mp.containsKey(s)) {
73+
mp.put(s, i);
74+
}
75+
}
76+
return ans;
77+
}
78+
}
79+
```
80+
81+
### **C++**
82+
83+
```cpp
84+
class Solution {
85+
public:
86+
int maxSubArrayLen(vector<int>& nums, int k) {
87+
unordered_map<int, int> mp;
88+
mp[0] = -1;
89+
int s = 0, ans = 0;
90+
for (int i = 0; i < nums.size(); ++i)
91+
{
92+
s += nums[i];
93+
if (mp.count(s - k)) ans = max(ans, i - mp[s - k]);
94+
if (!mp.count(s)) mp[s] = i;
95+
}
96+
return ans;
97+
}
98+
};
99+
```
51100
101+
### **Go**
102+
103+
```go
104+
func maxSubArrayLen(nums []int, k int) int {
105+
mp := map[int]int{0: -1}
106+
s, ans := 0, 0
107+
for i, v := range nums {
108+
s += v
109+
if j, ok := mp[s-k]; ok {
110+
ans = max(ans, i-j)
111+
}
112+
if _, ok := mp[s]; !ok {
113+
mp[s] = i
114+
}
115+
}
116+
return ans
117+
}
118+
119+
func max(a, b int) int {
120+
if a > b {
121+
return a
122+
}
123+
return b
124+
}
52125
```
53126

54127
### **...**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
int maxSubArrayLen(vector<int>& nums, int k) {
4+
unordered_map<int, int> mp;
5+
mp[0] = -1;
6+
int s = 0, ans = 0;
7+
for (int i = 0; i < nums.size(); ++i)
8+
{
9+
s += nums[i];
10+
if (mp.count(s - k)) ans = max(ans, i - mp[s - k]);
11+
if (!mp.count(s)) mp[s] = i;
12+
}
13+
return ans;
14+
}
15+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
func maxSubArrayLen(nums []int, k int) int {
2+
mp := map[int]int{0: -1}
3+
s, ans := 0, 0
4+
for i, v := range nums {
5+
s += v
6+
if j, ok := mp[s-k]; ok {
7+
ans = max(ans, i-j)
8+
}
9+
if _, ok := mp[s]; !ok {
10+
mp[s] = i
11+
}
12+
}
13+
return ans
14+
}
15+
16+
func max(a, b int) int {
17+
if a > b {
18+
return a
19+
}
20+
return b
21+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int maxSubArrayLen(int[] nums, int k) {
3+
Map<Integer, Integer> mp = new HashMap<>();
4+
mp.put(0, -1);
5+
int s = 0;
6+
int ans = 0;
7+
for (int i = 0; i < nums.length; ++i) {
8+
s += nums[i];
9+
if (mp.containsKey(s - k)) {
10+
ans = Math.max(ans, i - mp.get(s - k));
11+
}
12+
if (!mp.containsKey(s)) {
13+
mp.put(s, i);
14+
}
15+
}
16+
return ans;
17+
}
18+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def maxSubArrayLen(self, nums: List[int], k: int) -> int:
3+
mp = {0: -1}
4+
s = ans = 0
5+
for i, v in enumerate(nums):
6+
s += v
7+
if s - k in mp:
8+
ans = max(ans, i - mp[s - k])
9+
if s not in mp:
10+
mp[s] = i
11+
return ans

0 commit comments

Comments
 (0)