File tree 6 files changed +243
-2
lines changed
solution/1100-1199/1151.Minimum Swaps to Group All 1's Together
6 files changed +243
-2
lines changed Original file line number Diff line number Diff line change 60
60
61
61
<!-- 这里可写通用的实现逻辑 -->
62
62
63
+ ** 方法一:滑动窗口**
64
+
65
+ 我们先统计数组中 $1$ 的个数,记为 $k$。然后我们使用滑动窗口,窗口大小为 $k$,窗口右边界从左向右移动,统计窗口内 $1$ 的个数,记为 $t$。每次移动窗口时,都更新 $t$ 的值,最后窗口右边界移动到数组末尾时,窗口内 $1$ 的个数最多,记为 $mx$。最后答案为 $k - mx$。
66
+
67
+ 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组长度。
68
+
63
69
<!-- tabs:start -->
64
70
65
71
### ** Python3**
66
72
67
73
<!-- 这里可写当前语言的特殊实现逻辑 -->
68
74
69
75
``` 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
71
86
```
72
87
73
88
### ** Java**
74
89
75
90
<!-- 这里可写当前语言的特殊实现逻辑 -->
76
91
77
92
``` 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
+ ```
78
138
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
+ }
79
166
```
80
167
81
168
### ** ...**
Original file line number Diff line number Diff line change @@ -50,13 +50,94 @@ The minimum is 1.
50
50
### ** Python3**
51
51
52
52
``` 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
54
63
```
55
64
56
65
### ** Java**
57
66
58
67
``` 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
+ ```
59
113
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
+ }
60
141
```
61
142
62
143
### ** ...**
Original file line number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change
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 number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments