Skip to content

Commit 0eda68c

Browse files
committed
feat: add solutions to lc problem: No.1151
No.1151.Minimum Swaps to Group All 1's Together
1 parent b3df5be commit 0eda68c

File tree

6 files changed

+243
-2
lines changed

6 files changed

+243
-2
lines changed

solution/1100-1199/1151.Minimum Swaps to Group All 1's Together/README.md

+88-1
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,109 @@
6060

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

63+
**方法一:滑动窗口**
64+
65+
我们先统计数组中 $1$ 的个数,记为 $k$。然后我们使用滑动窗口,窗口大小为 $k$,窗口右边界从左向右移动,统计窗口内 $1$ 的个数,记为 $t$。每次移动窗口时,都更新 $t$ 的值,最后窗口右边界移动到数组末尾时,窗口内 $1$ 的个数最多,记为 $mx$。最后答案为 $k - mx$。
66+
67+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组长度。
68+
6369
<!-- tabs:start -->
6470

6571
### **Python3**
6672

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

6975
```python
70-
76+
class Solution:
77+
def minSwaps(self, data: List[int]) -> int:
78+
k = data.count(1)
79+
t = sum(data[:k])
80+
mx = t
81+
for i in range(k, len(data)):
82+
t += data[i]
83+
t -= data[i - k]
84+
mx = max(mx, t)
85+
return k - mx
7186
```
7287

7388
### **Java**
7489

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

7792
```java
93+
class Solution {
94+
public int minSwaps(int[] data) {
95+
int k = 0;
96+
for (int v : data) {
97+
k += v;
98+
}
99+
int t = 0;
100+
for (int i = 0; i < k; ++i) {
101+
t += data[i];
102+
}
103+
int mx = t;
104+
for (int i = k; i < data.length; ++i) {
105+
t += data[i];
106+
t -= data[i - k];
107+
mx = Math.max(mx, t);
108+
}
109+
return k - mx;
110+
}
111+
}
112+
```
113+
114+
### **C++**
115+
116+
```cpp
117+
class Solution {
118+
public:
119+
int minSwaps(vector<int>& data) {
120+
int k = 0;
121+
for (int& v : data) {
122+
k += v;
123+
}
124+
int t = 0;
125+
for (int i = 0; i < k; ++i) {
126+
t += data[i];
127+
}
128+
int mx = t;
129+
for (int i = k; i < data.size(); ++i) {
130+
t += data[i];
131+
t -= data[i - k];
132+
mx = max(mx, t);
133+
}
134+
return k - mx;
135+
}
136+
};
137+
```
78138
139+
### **Go**
140+
141+
```go
142+
func minSwaps(data []int) int {
143+
k := 0
144+
for _, v := range data {
145+
k += v
146+
}
147+
t := 0
148+
for _, v := range data[:k] {
149+
t += v
150+
}
151+
mx := t
152+
for i := k; i < len(data); i++ {
153+
t += data[i]
154+
t -= data[i-k]
155+
mx = max(mx, t)
156+
}
157+
return k - mx
158+
}
159+
160+
func max(a, b int) int {
161+
if a > b {
162+
return a
163+
}
164+
return b
165+
}
79166
```
80167

81168
### **...**

solution/1100-1199/1151.Minimum Swaps to Group All 1's Together/README_EN.md

+82-1
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,94 @@ The minimum is 1.
5050
### **Python3**
5151

5252
```python
53-
53+
class Solution:
54+
def minSwaps(self, data: List[int]) -> int:
55+
k = data.count(1)
56+
t = sum(data[:k])
57+
mx = t
58+
for i in range(k, len(data)):
59+
t += data[i]
60+
t -= data[i - k]
61+
mx = max(mx, t)
62+
return k - mx
5463
```
5564

5665
### **Java**
5766

5867
```java
68+
class Solution {
69+
public int minSwaps(int[] data) {
70+
int k = 0;
71+
for (int v : data) {
72+
k += v;
73+
}
74+
int t = 0;
75+
for (int i = 0; i < k; ++i) {
76+
t += data[i];
77+
}
78+
int mx = t;
79+
for (int i = k; i < data.length; ++i) {
80+
t += data[i];
81+
t -= data[i - k];
82+
mx = Math.max(mx, t);
83+
}
84+
return k - mx;
85+
}
86+
}
87+
```
88+
89+
### **C++**
90+
91+
```cpp
92+
class Solution {
93+
public:
94+
int minSwaps(vector<int>& data) {
95+
int k = 0;
96+
for (int& v : data) {
97+
k += v;
98+
}
99+
int t = 0;
100+
for (int i = 0; i < k; ++i) {
101+
t += data[i];
102+
}
103+
int mx = t;
104+
for (int i = k; i < data.size(); ++i) {
105+
t += data[i];
106+
t -= data[i - k];
107+
mx = max(mx, t);
108+
}
109+
return k - mx;
110+
}
111+
};
112+
```
59113
114+
### **Go**
115+
116+
```go
117+
func minSwaps(data []int) int {
118+
k := 0
119+
for _, v := range data {
120+
k += v
121+
}
122+
t := 0
123+
for _, v := range data[:k] {
124+
t += v
125+
}
126+
mx := t
127+
for i := k; i < len(data); i++ {
128+
t += data[i]
129+
t -= data[i-k]
130+
mx = max(mx, t)
131+
}
132+
return k - mx
133+
}
134+
135+
func max(a, b int) int {
136+
if a > b {
137+
return a
138+
}
139+
return b
140+
}
60141
```
61142

62143
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int minSwaps(vector<int>& data) {
4+
int k = 0;
5+
for (int& v : data) {
6+
k += v;
7+
}
8+
int t = 0;
9+
for (int i = 0; i < k; ++i) {
10+
t += data[i];
11+
}
12+
int mx = t;
13+
for (int i = k; i < data.size(); ++i) {
14+
t += data[i];
15+
t -= data[i - k];
16+
mx = max(mx, t);
17+
}
18+
return k - mx;
19+
}
20+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
func minSwaps(data []int) int {
2+
k := 0
3+
for _, v := range data {
4+
k += v
5+
}
6+
t := 0
7+
for _, v := range data[:k] {
8+
t += v
9+
}
10+
mx := t
11+
for i := k; i < len(data); i++ {
12+
t += data[i]
13+
t -= data[i-k]
14+
mx = max(mx, t)
15+
}
16+
return k - mx
17+
}
18+
19+
func max(a, b int) int {
20+
if a > b {
21+
return a
22+
}
23+
return b
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public int minSwaps(int[] data) {
3+
int k = 0;
4+
for (int v : data) {
5+
k += v;
6+
}
7+
int t = 0;
8+
for (int i = 0; i < k; ++i) {
9+
t += data[i];
10+
}
11+
int mx = t;
12+
for (int i = k; i < data.length; ++i) {
13+
t += data[i];
14+
t -= data[i - k];
15+
mx = Math.max(mx, t);
16+
}
17+
return k - mx;
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def minSwaps(self, data: List[int]) -> int:
3+
k = data.count(1)
4+
t = sum(data[:k])
5+
mx = t
6+
for i in range(k, len(data)):
7+
t += data[i]
8+
t -= data[i - k]
9+
mx = max(mx, t)
10+
return k - mx

0 commit comments

Comments
 (0)