File tree Expand file tree Collapse file tree 4 files changed +182
-1
lines changed
solution/1000-1099/1089.Duplicate Zeros Expand file tree Collapse file tree 4 files changed +182
-1
lines changed Original file line number Diff line number Diff line change 41
41
42
42
<!-- 这里可写通用的实现逻辑 -->
43
43
44
- ** 方法一:双指针**
44
+ 由于是原地修改,所以不能直接将 0 的后一位直接修改为 0,这会丢失元素数据。
45
+
46
+ 若选择插入,则会导致元素位置调整,时间复杂度偏高。
47
+
48
+ ** 方法一:模拟**
49
+
50
+ 开辟一个等长数组,将 ` arr ` 复刻一份,再进行简单模拟即可。
51
+
52
+ - 时间复杂度:$O(n)$。
53
+ - 空间复杂度:$O(n)$。
54
+
55
+ ** 方法二:双指针**
56
+
57
+ - 时间复杂度:$O(n)$。
58
+ - 空间复杂度:$O(1)$。
45
59
46
60
<!-- tabs:start -->
47
61
@@ -161,6 +175,65 @@ func duplicateZeros(arr []int) {
161
175
}
162
176
```
163
177
178
+ ### ** C**
179
+
180
+ ``` c
181
+ void duplicateZeros (int* arr, int arrSize){
182
+ int i = 0;
183
+ int j = 0;
184
+ while (j < arrSize) {
185
+ if (arr[ i] == 0) {
186
+ j++;
187
+ }
188
+ i++;
189
+ j++;
190
+ }
191
+ i--;
192
+ j--;
193
+ while (i >= 0) {
194
+ if (arr[ i] == 0) {
195
+ if (j < arrSize) {
196
+ arr[ j] = arr[ i] ;
197
+ }
198
+ j--;
199
+ }
200
+ arr[ j] = arr[ i] ;
201
+ i--;
202
+ j--;
203
+ }
204
+ }
205
+ ```
206
+
207
+ ### **Rust**
208
+
209
+ ```rust
210
+ impl Solution {
211
+ pub fn duplicate_zeros(arr: &mut Vec<i32>) {
212
+ let n = arr.len();
213
+ let mut i = 0;
214
+ let mut j = 0;
215
+ while j < n {
216
+ if arr[i] == 0 {
217
+ j += 1;
218
+ }
219
+ j += 1;
220
+ i += 1;
221
+ }
222
+ while i > 0 {
223
+ if arr[i - 1] == 0 {
224
+ if j <= n {
225
+ arr[j - 1] = arr[i - 1];
226
+ }
227
+ j -= 1;
228
+ }
229
+ arr[j - 1] = arr[i - 1];
230
+ i -= 1;
231
+ j -= 1;
232
+ }
233
+ }
234
+ }
235
+ ```
236
+
164
237
### ** ...**
165
238
166
239
```
Original file line number Diff line number Diff line change @@ -149,6 +149,65 @@ func duplicateZeros(arr []int) {
149
149
}
150
150
```
151
151
152
+ ### ** C**
153
+
154
+ ``` c
155
+ void duplicateZeros (int* arr, int arrSize){
156
+ int i = 0;
157
+ int j = 0;
158
+ while (j < arrSize) {
159
+ if (arr[ i] == 0) {
160
+ j++;
161
+ }
162
+ i++;
163
+ j++;
164
+ }
165
+ i--;
166
+ j--;
167
+ while (i >= 0) {
168
+ if (arr[ i] == 0) {
169
+ if (j < arrSize) {
170
+ arr[ j] = arr[ i] ;
171
+ }
172
+ j--;
173
+ }
174
+ arr[ j] = arr[ i] ;
175
+ i--;
176
+ j--;
177
+ }
178
+ }
179
+ ```
180
+
181
+ ### **Rust**
182
+
183
+ ```rust
184
+ impl Solution {
185
+ pub fn duplicate_zeros(arr: &mut Vec<i32>) {
186
+ let n = arr.len();
187
+ let mut i = 0;
188
+ let mut j = 0;
189
+ while j < n {
190
+ if arr[i] == 0 {
191
+ j += 1;
192
+ }
193
+ j += 1;
194
+ i += 1;
195
+ }
196
+ while i > 0 {
197
+ if arr[i - 1] == 0 {
198
+ if j <= n {
199
+ arr[j - 1] = arr[i - 1];
200
+ }
201
+ j -= 1;
202
+ }
203
+ arr[j - 1] = arr[i - 1];
204
+ i -= 1;
205
+ j -= 1;
206
+ }
207
+ }
208
+ }
209
+ ```
210
+
152
211
### ** ...**
153
212
154
213
```
Original file line number Diff line number Diff line change
1
+ void duplicateZeros (int * arr , int arrSize ){
2
+ int i = 0 ;
3
+ int j = 0 ;
4
+ while (j < arrSize ) {
5
+ if (arr [i ] == 0 ) {
6
+ j ++ ;
7
+ }
8
+ i ++ ;
9
+ j ++ ;
10
+ }
11
+ i -- ;
12
+ j -- ;
13
+ while (i >= 0 ) {
14
+ if (arr [i ] == 0 ) {
15
+ if (j < arrSize ) {
16
+ arr [j ] = arr [i ];
17
+ }
18
+ j -- ;
19
+ }
20
+ arr [j ] = arr [i ];
21
+ i -- ;
22
+ j -- ;
23
+ }
24
+ }
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn duplicate_zeros ( arr : & mut Vec < i32 > ) {
3
+ let n = arr. len ( ) ;
4
+ let mut i = 0 ;
5
+ let mut j = 0 ;
6
+ while j < n {
7
+ if arr[ i] == 0 {
8
+ j += 1 ;
9
+ }
10
+ j += 1 ;
11
+ i += 1 ;
12
+ }
13
+ while i > 0 {
14
+ if arr[ i - 1 ] == 0 {
15
+ if j <= n {
16
+ arr[ j - 1 ] = arr[ i - 1 ] ;
17
+ }
18
+ j -= 1 ;
19
+ }
20
+ arr[ j - 1 ] = arr[ i - 1 ] ;
21
+ i -= 1 ;
22
+ j -= 1 ;
23
+ }
24
+ }
25
+ }
You can’t perform that action at this time.
0 commit comments