Skip to content

Commit 76e188d

Browse files
committed
feat: update solutions to lc problems: No.26,80,283
* No.0026.Remove Duplicates from Sorted Array * No.0080.Remove Duplicates from Sorted Array II * No.0283.Move Zeroes
1 parent 4f22633 commit 76e188d

23 files changed

+352
-462
lines changed

solution/0000-0099/0026.Remove Duplicates from Sorted Array/README.md

+55-58
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ for (int i = 0; i < len; i++) {
3030
    print(nums[i]);
3131
}
3232
</pre>
33-
 
3433

3534
<p><strong>示例 1:</strong></p>
3635

@@ -60,11 +59,17 @@ for (int i = 0; i < len; i++) {
6059

6160
<p> </p>
6261

63-
6462
## 解法
6563

6664
<!-- 这里可写通用的实现逻辑 -->
6765

66+
原问题要求最多相同的数字最多出现 1 次,我们可以扩展至相同的数字最多保留 k 个。
67+
68+
- 由于相同的数字最多保留 k 个,那么原数组的前 k 个元素我们可以直接保留;
69+
- 对于后面的数字,能够保留的前提是:当前数字 num 与前面已保留的数字的倒数第 k 个元素比较,不同则保留,相同则跳过。
70+
71+
相似题目:[80. 删除有序数组中的重复项 II](/solution/0000-0099/0080.Remove%20Duplicates%20from%20Sorted%20Array%20II/README.md)
72+
6873
<!-- tabs:start -->
6974

7075
### **Python3**
@@ -74,13 +79,12 @@ for (int i = 0; i < len; i++) {
7479
```python
7580
class Solution:
7681
def removeDuplicates(self, nums: List[int]) -> int:
77-
cnt, n = 0, len(nums)
78-
for i in range(1, n):
79-
if nums[i] == nums[i - 1]:
80-
cnt += 1
81-
else:
82-
nums[i - cnt] = nums[i]
83-
return n - cnt
82+
i = 0
83+
for num in nums:
84+
if i < 1 or num != nums[i - 1]:
85+
nums[i] = num
86+
i += 1
87+
return i
8488
```
8589

8690
### **Java**
@@ -90,64 +94,62 @@ class Solution:
9094
```java
9195
class Solution {
9296
public int removeDuplicates(int[] nums) {
93-
int cnt = 0, n = nums.length;
94-
for (int i = 1; i < n; ++i) {
95-
if (nums[i] == nums[i - 1]) ++cnt;
96-
else nums[i - cnt] = nums[i];
97+
int i = 0;
98+
for (int num : nums) {
99+
if (i < 1 || num != nums[i - 1]) {
100+
nums[i++] = num;
101+
}
97102
}
98-
return n - cnt;
103+
return i;
99104
}
100105
}
101106
```
102107

103-
### **JavaScript**
108+
### **C++**
104109

105-
```js
106-
/**
107-
* @param {number[]} nums
108-
* @return {number}
109-
*/
110-
var removeDuplicates = function (nums) {
111-
let cnt = 0;
112-
const n = nums.length;
113-
for (let i = 1; i < n; ++i) {
114-
if (nums[i] == nums[i - 1]) ++cnt;
115-
else nums[i - cnt] = nums[i];
116-
}
117-
return n - cnt;
110+
```cpp
111+
class Solution {
112+
public:
113+
int removeDuplicates(vector<int>& nums) {
114+
int i = 0;
115+
for (int& num : nums)
116+
if (i < 1 || num != nums[i - 1])
117+
nums[i++] = num;
118+
return i;
119+
}
118120
};
119121
```
120122
121123
### **Go**
122124
123125
```go
124126
func removeDuplicates(nums []int) int {
125-
cnt := 0
126-
n := len(nums)
127-
for i := 1; i < n; i++ {
128-
if nums[i] == nums[i - 1] {
129-
cnt++
130-
} else {
131-
nums[i - cnt] = nums[i]
132-
}
133-
}
134-
return n - cnt
127+
i := 0
128+
for _, num := range nums {
129+
if i < 1 || num != nums[i-1] {
130+
nums[i] = num
131+
i++
132+
}
133+
}
134+
return i
135135
}
136136
```
137137

138-
### **C++**
138+
### **JavaScript**
139139

140-
```cpp
141-
class Solution {
142-
public:
143-
int removeDuplicates(vector<int>& nums) {
144-
int cnt = 0, n = nums.size();
145-
for (int i = 1; i < n; ++i) {
146-
if (nums[i] == nums[i - 1]) ++cnt;
147-
else nums[i - cnt] = nums[i];
140+
```js
141+
/**
142+
* @param {number[]} nums
143+
* @return {number}
144+
*/
145+
var removeDuplicates = function(nums) {
146+
let i = 0;
147+
for (const num of nums) {
148+
if (i < 1 || num != nums[i - 1]) {
149+
nums[i++] = num;
148150
}
149-
return n - cnt;
150151
}
152+
return i;
151153
};
152154
```
153155

@@ -156,20 +158,15 @@ public:
156158
```cs
157159
public class Solution {
158160
public int RemoveDuplicates(int[] nums) {
159-
int cnt = 0;
160-
int n = nums.Length;
161-
for (int i = 1; i < n; ++i)
161+
int i = 0;
162+
foreach(int num in nums)
162163
{
163-
if (nums[i] == nums[i - 1])
164-
{
165-
++cnt;
166-
}
167-
else
164+
if (i < 1 || num != nums[i - 1])
168165
{
169-
nums[i - cnt] = nums[i];
166+
nums[i++] = num;
170167
}
171168
}
172-
return n - cnt;
169+
return i;
173170
}
174171
}
175172
```

solution/0000-0099/0026.Remove Duplicates from Sorted Array/README_EN.md

+48-57
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ for (int i = 0; i &lt; len; i++) {
5252
<li><code>nums</code>&nbsp;is sorted in ascending order.</li>
5353
</ul>
5454

55-
5655
## Solutions
5756

5857
<!-- tabs:start -->
@@ -62,78 +61,75 @@ for (int i = 0; i &lt; len; i++) {
6261
```python
6362
class Solution:
6463
def removeDuplicates(self, nums: List[int]) -> int:
65-
cnt, n = 0, len(nums)
66-
for i in range(1, n):
67-
if nums[i] == nums[i - 1]:
68-
cnt += 1
69-
else:
70-
nums[i - cnt] = nums[i]
71-
return n - cnt
64+
i = 0
65+
for num in nums:
66+
if i < 1 or num != nums[i - 1]:
67+
nums[i] = num
68+
i += 1
69+
return i
7270
```
7371

7472
### **Java**
7573

7674
```java
7775
class Solution {
7876
public int removeDuplicates(int[] nums) {
79-
int cnt = 0, n = nums.length;
80-
for (int i = 1; i < n; ++i) {
81-
if (nums[i] == nums[i - 1]) ++cnt;
82-
else nums[i - cnt] = nums[i];
77+
int i = 0;
78+
for (int num : nums) {
79+
if (i < 1 || num != nums[i - 1]) {
80+
nums[i++] = num;
81+
}
8382
}
84-
return n - cnt;
83+
return i;
8584
}
8685
}
8786
```
8887

89-
### **JavaScript**
88+
### **C++**
9089

91-
```js
92-
/**
93-
* @param {number[]} nums
94-
* @return {number}
95-
*/
96-
var removeDuplicates = function (nums) {
97-
let cnt = 0;
98-
const n = nums.length;
99-
for (let i = 1; i < n; ++i) {
100-
if (nums[i] == nums[i - 1]) ++cnt;
101-
else nums[i - cnt] = nums[i];
102-
}
103-
return n - cnt;
90+
```cpp
91+
class Solution {
92+
public:
93+
int removeDuplicates(vector<int>& nums) {
94+
int i = 0;
95+
for (int& num : nums)
96+
if (i < 1 || num != nums[i - 1])
97+
nums[i++] = num;
98+
return i;
99+
}
104100
};
105101
```
106102
107103
### **Go**
108104
109105
```go
110106
func removeDuplicates(nums []int) int {
111-
cnt := 0
112-
n := len(nums)
113-
for i := 1; i < n; i++ {
114-
if nums[i] == nums[i - 1] {
115-
cnt++
116-
} else {
117-
nums[i - cnt] = nums[i]
118-
}
119-
}
120-
return n - cnt
107+
i := 0
108+
for _, num := range nums {
109+
if i < 1 || num != nums[i-1] {
110+
nums[i] = num
111+
i++
112+
}
113+
}
114+
return i
121115
}
122116
```
123117

124-
### **C++**
118+
### **JavaScript**
125119

126-
```cpp
127-
class Solution {
128-
public:
129-
int removeDuplicates(vector<int>& nums) {
130-
int cnt = 0, n = nums.size();
131-
for (int i = 1; i < n; ++i) {
132-
if (nums[i] == nums[i - 1]) ++cnt;
133-
else nums[i - cnt] = nums[i];
120+
```js
121+
/**
122+
* @param {number[]} nums
123+
* @return {number}
124+
*/
125+
var removeDuplicates = function(nums) {
126+
let i = 0;
127+
for (const num of nums) {
128+
if (i < 1 || num != nums[i - 1]) {
129+
nums[i++] = num;
134130
}
135-
return n - cnt;
136131
}
132+
return i;
137133
};
138134
```
139135

@@ -142,20 +138,15 @@ public:
142138
```cs
143139
public class Solution {
144140
public int RemoveDuplicates(int[] nums) {
145-
int cnt = 0;
146-
int n = nums.Length;
147-
for (int i = 1; i < n; ++i)
141+
int i = 0;
142+
foreach(int num in nums)
148143
{
149-
if (nums[i] == nums[i - 1])
150-
{
151-
++cnt;
152-
}
153-
else
144+
if (i < 1 || num != nums[i - 1])
154145
{
155-
nums[i - cnt] = nums[i];
146+
nums[i++] = num;
156147
}
157148
}
158-
return n - cnt;
149+
return i;
159150
}
160151
}
161152
```
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
class Solution {
22
public:
33
int removeDuplicates(vector<int>& nums) {
4-
int cnt = 0, n = nums.size();
5-
for (int i = 1; i < n; ++i) {
6-
if (nums[i] == nums[i - 1]) ++cnt;
7-
else nums[i - cnt] = nums[i];
8-
}
9-
return n - cnt;
4+
int i = 0;
5+
for (int& num : nums)
6+
if (i < 1 || num != nums[i - 1])
7+
nums[i++] = num;
8+
return i;
109
}
1110
};
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
public class Solution {
22
public int RemoveDuplicates(int[] nums) {
3-
int cnt = 0;
4-
int n = nums.Length;
5-
for (int i = 1; i < n; ++i)
3+
int i = 0;
4+
foreach(int num in nums)
65
{
7-
if (nums[i] == nums[i - 1])
6+
if (i < 1 || num != nums[i - 1])
87
{
9-
++cnt;
10-
}
11-
else
12-
{
13-
nums[i - cnt] = nums[i];
8+
nums[i++] = num;
149
}
1510
}
16-
return n - cnt;
11+
return i;
1712
}
1813
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
func removeDuplicates(nums []int) int {
2-
cnt := 0
3-
n := len(nums)
4-
for i := 1; i < n; i++ {
5-
if nums[i] == nums[i - 1] {
6-
cnt++
7-
} else {
8-
nums[i - cnt] = nums[i]
9-
}
10-
}
11-
return n - cnt
2+
i := 0
3+
for _, num := range nums {
4+
if i < 1 || num != nums[i-1] {
5+
nums[i] = num
6+
i++
7+
}
8+
}
9+
return i
1210
}

0 commit comments

Comments
 (0)