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 ff87889

Browse files
committed
feat: add solutions to lc problem: No.1089
No.1089.Duplicate Zeros
1 parent 24613ee commit ff87889

File tree

4 files changed

+182
-1
lines changed

4 files changed

+182
-1
lines changed

‎solution/1000-1099/1089.Duplicate Zeros/README.md‎

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,21 @@
4141

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

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)$。
4559

4660
<!-- tabs:start -->
4761

@@ -161,6 +175,65 @@ func duplicateZeros(arr []int) {
161175
}
162176
```
163177

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+
164237
### **...**
165238

166239
```

‎solution/1000-1099/1089.Duplicate Zeros/README_EN.md‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,65 @@ func duplicateZeros(arr []int) {
149149
}
150150
```
151151

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+
152211
### **...**
153212

154213
```
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
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+
}

0 commit comments

Comments
(0)

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