File tree Expand file tree Collapse file tree 6 files changed +287
-12
lines changed
solution/1000-1099/1089.Duplicate Zeros Expand file tree Collapse file tree 6 files changed +287
-12
lines changed Original file line number Diff line number Diff line change 41
41
42
42
<!-- 这里可写通用的实现逻辑 -->
43
43
44
+ ** 方法一:双指针**
45
+
44
46
<!-- tabs:start -->
45
47
46
48
### ** Python3**
47
49
48
50
<!-- 这里可写当前语言的特殊实现逻辑 -->
49
51
50
52
``` python
51
-
53
+ class Solution :
54
+ def duplicateZeros (self , arr : List[int ]) -> None :
55
+ """
56
+ Do not return anything, modify arr in-place instead.
57
+ """
58
+ n = len (arr)
59
+ i, k = - 1 , 0
60
+ while k < n:
61
+ i += 1
62
+ k += 1 if arr[i] else 2
63
+ j = n - 1
64
+ if k == n + 1 :
65
+ arr[j] = 0
66
+ i, j = i - 1 , j - 1
67
+ while ~ j:
68
+ if arr[i] == 0 :
69
+ arr[j] = arr[j - 1 ] = arr[i]
70
+ j -= 1
71
+ else :
72
+ arr[j] = arr[i]
73
+ i, j = i - 1 , j - 1
52
74
```
53
75
54
76
### ** Java**
55
77
56
78
<!-- 这里可写当前语言的特殊实现逻辑 -->
57
79
58
80
``` java
81
+ class Solution {
82
+ public void duplicateZeros (int [] arr ) {
83
+ int n = arr. length;
84
+ int i = - 1 , k = 0 ;
85
+ while (k < n) {
86
+ ++ i;
87
+ k += arr[i] > 0 ? 1 : 2 ;
88
+ }
89
+ int j = n - 1 ;
90
+ if (k == n + 1 ) {
91
+ arr[j-- ] = 0 ;
92
+ -- i;
93
+ }
94
+ while (j >= 0 ) {
95
+ arr[j] = arr[i];
96
+ if (arr[i] == 0 ) {
97
+ arr[-- j] = arr[i];
98
+ }
99
+ -- i;
100
+ -- j;
101
+ }
102
+ }
103
+ }
104
+ ```
105
+
106
+ ### ** C++**
107
+
108
+ ``` cpp
109
+ class Solution {
110
+ public:
111
+ void duplicateZeros(vector<int >& arr) {
112
+ int n = arr.size();
113
+ int i = -1, k = 0;
114
+ while (k < n)
115
+ {
116
+ ++i;
117
+ k += arr[ i] ? 1 : 2;
118
+ }
119
+ int j = n - 1;
120
+ if (k == n + 1)
121
+ {
122
+ arr[ j--] = 0;
123
+ --i;
124
+ }
125
+ while (~ j)
126
+ {
127
+ arr[ j] = arr[ i] ;
128
+ if (arr[ i] == 0) arr[ --j] = arr[ i] ;
129
+ --i;
130
+ --j;
131
+ }
132
+ }
133
+ };
134
+ ```
59
135
136
+ ### **Go**
137
+
138
+ ```go
139
+ func duplicateZeros(arr []int) {
140
+ n := len(arr)
141
+ i, k := -1, 0
142
+ for k < n {
143
+ i, k = i+1, k+1
144
+ if arr[i] == 0 {
145
+ k++
146
+ }
147
+ }
148
+ j := n - 1
149
+ if k == n+1 {
150
+ arr[j] = 0
151
+ i, j = i-1, j-1
152
+ }
153
+ for j >= 0 {
154
+ arr[j] = arr[i]
155
+ if arr[i] == 0 {
156
+ j--
157
+ arr[j] = arr[i]
158
+ }
159
+ i, j = i-1, j-1
160
+ }
161
+ }
60
162
```
61
163
62
164
### ** ...**
Original file line number Diff line number Diff line change 40
40
### ** Python3**
41
41
42
42
``` python
43
-
43
+ class Solution :
44
+ def duplicateZeros (self , arr : List[int ]) -> None :
45
+ """
46
+ Do not return anything, modify arr in-place instead.
47
+ """
48
+ n = len (arr)
49
+ i, k = - 1 , 0
50
+ while k < n:
51
+ i += 1
52
+ k += 1 if arr[i] else 2
53
+ j = n - 1
54
+ if k == n + 1 :
55
+ arr[j] = 0
56
+ i, j = i - 1 , j - 1
57
+ while ~ j:
58
+ if arr[i] == 0 :
59
+ arr[j] = arr[j - 1 ] = arr[i]
60
+ j -= 1
61
+ else :
62
+ arr[j] = arr[i]
63
+ i, j = i - 1 , j - 1
44
64
```
45
65
46
66
### ** Java**
47
67
48
68
``` java
69
+ class Solution {
70
+ public void duplicateZeros (int [] arr ) {
71
+ int n = arr. length;
72
+ int i = - 1 , k = 0 ;
73
+ while (k < n) {
74
+ ++ i;
75
+ k += arr[i] > 0 ? 1 : 2 ;
76
+ }
77
+ int j = n - 1 ;
78
+ if (k == n + 1 ) {
79
+ arr[j-- ] = 0 ;
80
+ -- i;
81
+ }
82
+ while (j >= 0 ) {
83
+ arr[j] = arr[i];
84
+ if (arr[i] == 0 ) {
85
+ arr[-- j] = arr[i];
86
+ }
87
+ -- i;
88
+ -- j;
89
+ }
90
+ }
91
+ }
92
+ ```
93
+
94
+ ### ** C++**
95
+
96
+ ``` cpp
97
+ class Solution {
98
+ public:
99
+ void duplicateZeros(vector<int >& arr) {
100
+ int n = arr.size();
101
+ int i = -1, k = 0;
102
+ while (k < n)
103
+ {
104
+ ++i;
105
+ k += arr[ i] ? 1 : 2;
106
+ }
107
+ int j = n - 1;
108
+ if (k == n + 1)
109
+ {
110
+ arr[ j--] = 0;
111
+ --i;
112
+ }
113
+ while (~ j)
114
+ {
115
+ arr[ j] = arr[ i] ;
116
+ if (arr[ i] == 0) arr[ --j] = arr[ i] ;
117
+ --i;
118
+ --j;
119
+ }
120
+ }
121
+ };
122
+ ```
49
123
124
+ ### **Go**
125
+
126
+ ```go
127
+ func duplicateZeros(arr []int) {
128
+ n := len(arr)
129
+ i, k := -1, 0
130
+ for k < n {
131
+ i, k = i+1, k+1
132
+ if arr[i] == 0 {
133
+ k++
134
+ }
135
+ }
136
+ j := n - 1
137
+ if k == n+1 {
138
+ arr[j] = 0
139
+ i, j = i-1, j-1
140
+ }
141
+ for j >= 0 {
142
+ arr[j] = arr[i]
143
+ if arr[i] == 0 {
144
+ j--
145
+ arr[j] = arr[i]
146
+ }
147
+ i, j = i-1, j-1
148
+ }
149
+ }
50
150
```
51
151
52
152
### ** ...**
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ void duplicateZeros (vector<int >& arr) {
4
+ int n = arr.size ();
5
+ int i = -1 , k = 0 ;
6
+ while (k < n)
7
+ {
8
+ ++i;
9
+ k += arr[i] ? 1 : 2 ;
10
+ }
11
+ int j = n - 1 ;
12
+ if (k == n + 1 )
13
+ {
14
+ arr[j--] = 0 ;
15
+ --i;
16
+ }
17
+ while (~j)
18
+ {
19
+ arr[j] = arr[i];
20
+ if (arr[i] == 0 ) arr[--j] = arr[i];
21
+ --i;
22
+ --j;
23
+ }
24
+ }
25
+ };
Original file line number Diff line number Diff line change
1
+ func duplicateZeros (arr []int ) {
2
+ n := len (arr )
3
+ i , k := - 1 , 0
4
+ for k < n {
5
+ i , k = i + 1 , k + 1
6
+ if arr [i ] == 0 {
7
+ k ++
8
+ }
9
+ }
10
+ j := n - 1
11
+ if k == n + 1 {
12
+ arr [j ] = 0
13
+ i , j = i - 1 , j - 1
14
+ }
15
+ for j >= 0 {
16
+ arr [j ] = arr [i ]
17
+ if arr [i ] == 0 {
18
+ j --
19
+ arr [j ] = arr [i ]
20
+ }
21
+ i , j = i - 1 , j - 1
22
+ }
23
+ }
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public void duplicateZeros (int [] arr ) {
3
3
int n = arr .length ;
4
- int i = 0 , j = 0 ;
5
- while (j < n ) {
6
- if (arr [i ] == 0 ) ++j ;
4
+ int i = -1 , k = 0 ;
5
+ while (k < n ) {
7
6
++i ;
8
- ++ j ;
7
+ k += arr [ i ] > 0 ? 1 : 2 ;
9
8
}
10
- --i ; // i 回到最后一次合法的位置
11
- --j ; // j 同理,但 j 仍可能等于 n(例如输入 [0])
12
- while (i >= 0 ) {
13
- if (j < n ) arr [j ] = arr [i ];
14
- if (arr [i ] == 0 ) arr [--j ] = arr [i ];
9
+ int j = n - 1 ;
10
+ if (k == n + 1 ) {
11
+ arr [j --] = 0 ;
12
+ --i ;
13
+ }
14
+ while (j >= 0 ) {
15
+ arr [j ] = arr [i ];
16
+ if (arr [i ] == 0 ) {
17
+ arr [--j ] = arr [i ];
18
+ }
15
19
--i ;
16
20
--j ;
17
21
}
18
22
}
19
- }
23
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def duplicateZeros (self , arr : List [int ]) -> None :
3
+ """
4
+ Do not return anything, modify arr in-place instead.
5
+ """
6
+ n = len (arr )
7
+ i , k = - 1 , 0
8
+ while k < n :
9
+ i += 1
10
+ k += 1 if arr [i ] else 2
11
+ j = n - 1
12
+ if k == n + 1 :
13
+ arr [j ] = 0
14
+ i , j = i - 1 , j - 1
15
+ while ~ j :
16
+ if arr [i ] == 0 :
17
+ arr [j ] = arr [j - 1 ] = arr [i ]
18
+ j -= 1
19
+ else :
20
+ arr [j ] = arr [i ]
21
+ i , j = i - 1 , j - 1
You can’t perform that action at this time.
0 commit comments