Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f493f41

Browse files
feat: add solutions to lcof2 problems: No.011,012
1 parent 50e10ca commit f493f41

File tree

8 files changed

+190
-2
lines changed

8 files changed

+190
-2
lines changed

‎lcof2/剑指 Offer II 011. 0 和 1 个数相同的子数组/README.md‎

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,78 @@
4040

4141
<!-- 这里可写通用的实现逻辑 -->
4242

43+
前缀和加哈希表,把 0 当作 -1 处理,题目变成求和为 0 的子数组
44+
4345
<!-- tabs:start -->
4446

4547
### **Python3**
4648

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

4951
```python
50-
52+
class Solution:
53+
def findMaxLength(self, nums: List[int]) -> int:
54+
m = {0: -1}
55+
ans, sum = 0, 0
56+
for i, num in enumerate(nums):
57+
sum += 1 if num == 1 else -1
58+
if sum in m:
59+
ans = max(ans, i - m[sum])
60+
else:
61+
m[sum] = i
62+
return ans
5163
```
5264

5365
### **Java**
5466

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

5769
```java
70+
class Solution {
71+
public int findMaxLength(int[] nums) {
72+
Map<Integer, Integer> m = new HashMap<>();
73+
m.put(0, -1);
74+
int ans = 0, sum = 0;
75+
for (int i = 0; i < nums.length; i++) {
76+
sum += nums[i] == 1 ? 1 : -1;
77+
if (m.containsKey(sum)) {
78+
ans = Math.max(ans, i - m.get(sum));
79+
} else {
80+
m.put(sum, i);
81+
}
82+
}
83+
return ans;
84+
}
85+
}
86+
```
5887

88+
### **Go**
89+
90+
```go
91+
func findMaxLength(nums []int) int {
92+
m := map[int]int{0: -1}
93+
ans, sum := 0, 0
94+
for i, num := range nums {
95+
if num == 0 {
96+
sum -= 1
97+
} else {
98+
sum += 1
99+
}
100+
if j, ok := m[sum]; ok {
101+
ans = max(ans, i-j)
102+
} else {
103+
m[sum] = i
104+
}
105+
}
106+
return ans
107+
}
108+
109+
func max(a, b int) int {
110+
if a > b {
111+
return a
112+
}
113+
return b
114+
}
59115
```
60116

61117
### **...**
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
func findMaxLength(nums []int) int {
2+
m := map[int]int{0: -1}
3+
ans, sum := 0, 0
4+
for i, num := range nums {
5+
if num == 0 {
6+
sum -= 1
7+
} else {
8+
sum += 1
9+
}
10+
if j, ok := m[sum]; ok {
11+
ans = max(ans, i-j)
12+
} else {
13+
m[sum] = i
14+
}
15+
}
16+
return ans
17+
}
18+
19+
func max(a, b int) int {
20+
if a > b {
21+
return a
22+
}
23+
return b
24+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public int findMaxLength(int[] nums) {
3+
Map<Integer, Integer> m = new HashMap<>();
4+
m.put(0, -1);
5+
int ans = 0, sum = 0;
6+
for (int i = 0; i < nums.length; i++) {
7+
sum += nums[i] == 1 ? 1 : -1;
8+
if (m.containsKey(sum)) {
9+
ans = Math.max(ans, i - m.get(sum));
10+
} else {
11+
m.put(sum, i);
12+
}
13+
}
14+
return ans;
15+
}
16+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution:
2+
def findMaxLength(self, nums: List[int]) -> int:
3+
m = {0: -1}
4+
ans, sum = 0, 0
5+
for i, num in enumerate(nums):
6+
sum += 1 if num == 1 else -1
7+
if sum in m:
8+
ans = max(ans, i - m[sum])
9+
else:
10+
m[sum] = i
11+
return ans

‎lcof2/剑指 Offer II 012. 左右两边子数组的和相等/README.md‎

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,22 +61,65 @@
6161

6262
<!-- 这里可写通用的实现逻辑 -->
6363

64+
用前缀和进行预处理,避免重复计算
65+
6466
<!-- tabs:start -->
6567

6668
### **Python3**
6769

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

7072
```python
71-
73+
class Solution:
74+
def pivotIndex(self, nums: List[int]) -> int:
75+
n = len(nums)
76+
sum = [0 for _ in range(n + 1)]
77+
for i in range(1, n + 1):
78+
sum[i] = sum[i - 1] + nums[i - 1]
79+
for i in range(0, n):
80+
if sum[i] == sum[n] - sum[i + 1]:
81+
return i
82+
return -1
7283
```
7384

7485
### **Java**
7586

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

7889
```java
90+
class Solution {
91+
public int pivotIndex(int[] nums) {
92+
int n = nums.length;
93+
int[] sum = new int[n + 1];
94+
for (int i = 1; i <= n; i++) {
95+
sum[i] = sum[i - 1] + nums[i - 1];
96+
}
97+
for (int i = 0; i < n; i++) {
98+
if (sum[i] == sum[n] - sum[i + 1]) {
99+
return i;
100+
}
101+
}
102+
return -1;
103+
}
104+
}
105+
```
79106

107+
### **Go**
108+
109+
```go
110+
func pivotIndex(nums []int) int {
111+
n := len(nums)
112+
sum := make([]int, n+1)
113+
for i := 1; i <= n; i++ {
114+
sum[i] = sum[i-1] + nums[i-1]
115+
}
116+
for i := 0; i < n; i++ {
117+
if sum[i] == sum[n]-sum[i+1] {
118+
return i
119+
}
120+
}
121+
return -1
122+
}
80123
```
81124

82125
### **...**
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
func pivotIndex(nums []int) int {
2+
n := len(nums)
3+
sum := make([]int, n+1)
4+
for i := 1; i <= n; i++ {
5+
sum[i] = sum[i-1] + nums[i-1]
6+
}
7+
for i := 0; i < n; i++ {
8+
if sum[i] == sum[n]-sum[i+1] {
9+
return i
10+
}
11+
}
12+
return -1
13+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public int pivotIndex(int[] nums) {
3+
int n = nums.length;
4+
int[] sum = new int[n + 1];
5+
for (int i = 1; i <= n; i++) {
6+
sum[i] = sum[i - 1] + nums[i - 1];
7+
}
8+
for (int i = 0; i < n; i++) {
9+
if (sum[i] == sum[n] - sum[i + 1]) {
10+
return i;
11+
}
12+
}
13+
return -1;
14+
}
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def pivotIndex(self, nums: List[int]) -> int:
3+
n = len(nums)
4+
sum = [0 for _ in range(n + 1)]
5+
for i in range(1, n + 1):
6+
sum[i] = sum[i - 1] + nums[i - 1]
7+
for i in range(0, n):
8+
if sum[i] == sum[n] - sum[i + 1]:
9+
return i
10+
return -1

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /