Skip to content

Commit 880fb3d

Browse files
committed
finish 283
1 parent 5401727 commit 880fb3d

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

201-300/283. Move Zeroes.md

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# 283. Move Zeroes
2+
3+
- Difficulty: Easy.
4+
- Related Topics: Array, Two Pointers.
5+
- Similar Questions: Remove Element.
6+
7+
## Problem
8+
9+
Given an array ```nums```, write a function to move all ```0```'s to the end of it while maintaining the relative order of the non-zero elements.
10+
11+
**Example:**
12+
13+
```
14+
Input: [0,1,0,3,12]
15+
Output: [1,3,12,0,0]
16+
```
17+
18+
**Note**:
19+
20+
21+
22+
- You must do this **in-place** without making a copy of the array.
23+
24+
- Minimize the total number of operations.
25+
26+
27+
## Solution
28+
29+
```javascript
30+
/**
31+
* @param {number[]} nums
32+
* @return {void} Do not return anything, modify nums in-place instead.
33+
*/
34+
var moveZeroes = function(nums) {
35+
var len = nums.length;
36+
var lastZeroIndex = -1;
37+
for (var i = 0; i < len; i++) {
38+
if (nums[i] === 0 && lastZeroIndex === -1) {
39+
lastZeroIndex = i;
40+
} else if (nums[i] !== 0 && lastZeroIndex !== -1) {
41+
swap(nums, i, lastZeroIndex);
42+
lastZeroIndex += 1;
43+
}
44+
}
45+
};
46+
47+
var swap = function(arr, i, j) {
48+
var tmp = arr[i];
49+
arr[i] = arr[j];
50+
arr[j] = tmp;
51+
};
52+
```
53+
54+
**Explain:**
55+
56+
two pointer: index in the loop and last zero index we met.
57+
58+
every time we met a non-zero element, swap it with the last zero element, move the last zero element's index.
59+
60+
every time we met a zero element, log it if we haven't met any zero yet, otherwise just move on and do nothing.
61+
62+
**Complexity:**
63+
64+
* Time complexity : O(n).
65+
* Space complexity : O(1).

0 commit comments

Comments
 (0)