Skip to content

Commit 9c83904

Browse files
committed
feat: add solutions to lc problem: No.0026
No.0026.Remove Duplicates from Sorted Array
1 parent 4b40a8d commit 9c83904

File tree

9 files changed

+142
-134
lines changed

9 files changed

+142
-134
lines changed

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

+58-48
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,20 @@ for (int i = 0; i < k; i++) {
6363

6464
<!-- 这里可写通用的实现逻辑 -->
6565

66-
原问题要求最多相同的数字最多出现 1 次,我们可以扩展至相同的数字最多保留 k 个。
66+
**方法一:一次遍历**
6767

68-
- 由于相同的数字最多保留 k 个,那么原数组的前 k 个元素我们可以直接保留;
69-
- 对于后面的数字,能够保留的前提是:当前数字 num 与前面已保留的数字的倒数第 k 个元素比较,不同则保留,相同则跳过。
68+
我们用一个变量 $k$ 记录当前已经处理好的数组的长度,初始时 $k=0$,表示空数组。
69+
70+
然后我们从左到右遍历数组,对于遍历到的每个元素 $x$,如果 $k=0$ 或者 $x \neq nums[k-1]$,我们就将 $x$ 放到 $nums[k]$ 的位置,然后 $k$ 自增 1。否则,$x$ 与 $nums[k-1]$ 相同,我们直接跳过这个元素。继续遍历,直到遍历完整个数组。
71+
72+
这样,当遍历结束时,$nums$ 中前 $k$ 个元素就是我们要求的答案,且 $k$ 就是答案的长度。
73+
74+
补充:
75+
76+
原问题要求最多相同的数字最多出现 $1$ 次,我们可以扩展至相同的数字最多保留 $k$ 个。
77+
78+
- 由于相同的数字最多保留 $k$ 个,那么原数组的前 $k$ 个元素我们可以直接保留;
79+
- 对于后面的数字,能够保留的前提是:当前数字 $x$ 与前面已保留的数字的倒数第 $k$ 个元素比较,不同则保留,相同则跳过。
7080

7181
相似题目:[80. 删除有序数组中的重复项 II](/solution/0000-0099/0080.Remove%20Duplicates%20from%20Sorted%20Array%20II/README.md)
7282

@@ -79,12 +89,12 @@ for (int i = 0; i &lt; k; i++) {
7989
```python
8090
class Solution:
8191
def removeDuplicates(self, nums: List[int]) -> int:
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
92+
k = 0
93+
for x in nums:
94+
if k == 0 or x != nums[k - 1]:
95+
nums[k] = x
96+
k += 1
97+
return k
8898
```
8999

90100
### **Java**
@@ -94,13 +104,13 @@ class Solution:
94104
```java
95105
class Solution {
96106
public int removeDuplicates(int[] nums) {
97-
int i = 0;
98-
for (int num : nums) {
99-
if (i < 1 || num != nums[i - 1]) {
100-
nums[i++] = num;
107+
int k = 0;
108+
for (int x : nums) {
109+
if (k == 0 || x != nums[k - 1]) {
110+
nums[k++] = x;
101111
}
102112
}
103-
return i;
113+
return k;
104114
}
105115
}
106116
```
@@ -111,11 +121,13 @@ class Solution {
111121
class Solution {
112122
public:
113123
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;
124+
int k = 0;
125+
for (int x : nums) {
126+
if (k == 0 || x != nums[k - 1]) {
127+
nums[k++] = x;
128+
}
129+
}
130+
return k;
119131
}
120132
};
121133
```
@@ -134,14 +146,14 @@ public:
134146

135147
```go
136148
func removeDuplicates(nums []int) int {
137-
i := 0
138-
for _, num := range nums {
139-
if i < 1 || num != nums[i-1] {
140-
nums[i] = num
141-
i++
149+
k := 0
150+
for _, x := range nums {
151+
if k == 0 || x != nums[k-1] {
152+
nums[k] = x
153+
k++
142154
}
143155
}
144-
return i
156+
return k
145157
}
146158
```
147159

@@ -153,13 +165,13 @@ func removeDuplicates(nums []int) int {
153165
* @return {number}
154166
*/
155167
var removeDuplicates = function (nums) {
156-
let i = 0;
157-
for (const num of nums) {
158-
if (i < 1 || num != nums[i - 1]) {
159-
nums[i++] = num;
168+
let k = 0;
169+
for (const x of nums) {
170+
if (k === 0 || x !== nums[k - 1]) {
171+
nums[k++] = x;
160172
}
161173
}
162-
return i;
174+
return k;
163175
};
164176
```
165177

@@ -168,15 +180,13 @@ var removeDuplicates = function (nums) {
168180
```cs
169181
public class Solution {
170182
public int RemoveDuplicates(int[] nums) {
171-
int i = 0;
172-
foreach(int num in nums)
173-
{
174-
if (i < 1 || num != nums[i - 1])
175-
{
176-
nums[i++] = num;
183+
int k = 0;
184+
foreach (int x in nums) {
185+
if (k == 0 || x != nums[k - 1]) {
186+
nums[k++] = x;
177187
}
178188
}
179-
return i;
189+
return k;
180190
}
181191
}
182192
```
@@ -186,14 +196,14 @@ public class Solution {
186196
```rust
187197
impl Solution {
188198
pub fn remove_duplicates(nums: &mut Vec<i32>) -> i32 {
189-
let mut len = 0;
199+
let mut k = 0;
190200
for i in 0..nums.len() {
191-
if i == 0 || nums[i] != nums[len - 1] {
192-
nums[len] = nums[i];
193-
len += 1;
201+
if k == 0 || nums[i] != nums[k - 1] {
202+
nums[k] = nums[i];
203+
k += 1;
194204
}
195205
}
196-
len as i32
206+
k as i32
197207
}
198208
}
199209
```
@@ -202,19 +212,19 @@ impl Solution {
202212

203213
```php
204214
class Solution {
215+
205216
/**
206217
* @param Integer[] $nums
207218
* @return Integer
208219
*/
209220
function removeDuplicates(&$nums) {
210-
$fast = $slow = 0;
211-
while ($fast < count($nums)) {
212-
if ($nums[$fast] != $nums[$slow]) {
213-
$nums[++$slow] = $nums[$fast];
221+
$k = 0;
222+
foreach($nums as $x) {
223+
if ($k == 0 || $x != $nums[$k - 1]) {
224+
$nums[$k++] = $x;
214225
}
215-
$fast++;
216226
}
217-
return $slow + 1;
227+
return $k;
218228
}
219229
}
220230
```

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

+45-45
Original file line numberDiff line numberDiff line change
@@ -68,26 +68,26 @@ It does not matter what you leave beyond the returned k (hence they are undersco
6868
```python
6969
class Solution:
7070
def removeDuplicates(self, nums: List[int]) -> int:
71-
i = 0
72-
for num in nums:
73-
if i < 1 or num != nums[i - 1]:
74-
nums[i] = num
75-
i += 1
76-
return i
71+
k = 0
72+
for x in nums:
73+
if k == 0 or x != nums[k - 1]:
74+
nums[k] = x
75+
k += 1
76+
return k
7777
```
7878

7979
### **Java**
8080

8181
```java
8282
class Solution {
8383
public int removeDuplicates(int[] nums) {
84-
int i = 0;
85-
for (int num : nums) {
86-
if (i < 1 || num != nums[i - 1]) {
87-
nums[i++] = num;
84+
int k = 0;
85+
for (int x : nums) {
86+
if (k == 0 || x != nums[k - 1]) {
87+
nums[k++] = x;
8888
}
8989
}
90-
return i;
90+
return k;
9191
}
9292
}
9393
```
@@ -98,11 +98,13 @@ class Solution {
9898
class Solution {
9999
public:
100100
int removeDuplicates(vector<int>& nums) {
101-
int i = 0;
102-
for (int& num : nums)
103-
if (i < 1 || num != nums[i - 1])
104-
nums[i++] = num;
105-
return i;
101+
int k = 0;
102+
for (int x : nums) {
103+
if (k == 0 || x != nums[k - 1]) {
104+
nums[k++] = x;
105+
}
106+
}
107+
return k;
106108
}
107109
};
108110
```
@@ -121,14 +123,14 @@ public:
121123

122124
```go
123125
func removeDuplicates(nums []int) int {
124-
i := 0
125-
for _, num := range nums {
126-
if i < 1 || num != nums[i-1] {
127-
nums[i] = num
128-
i++
126+
k := 0
127+
for _, x := range nums {
128+
if k == 0 || x != nums[k-1] {
129+
nums[k] = x
130+
k++
129131
}
130132
}
131-
return i
133+
return k
132134
}
133135
```
134136

@@ -140,13 +142,13 @@ func removeDuplicates(nums []int) int {
140142
* @return {number}
141143
*/
142144
var removeDuplicates = function (nums) {
143-
let i = 0;
144-
for (const num of nums) {
145-
if (i < 1 || num != nums[i - 1]) {
146-
nums[i++] = num;
145+
let k = 0;
146+
for (const x of nums) {
147+
if (k === 0 || x !== nums[k - 1]) {
148+
nums[k++] = x;
147149
}
148150
}
149-
return i;
151+
return k;
150152
};
151153
```
152154

@@ -155,15 +157,13 @@ var removeDuplicates = function (nums) {
155157
```cs
156158
public class Solution {
157159
public int RemoveDuplicates(int[] nums) {
158-
int i = 0;
159-
foreach(int num in nums)
160-
{
161-
if (i < 1 || num != nums[i - 1])
162-
{
163-
nums[i++] = num;
160+
int k = 0;
161+
foreach (int x in nums) {
162+
if (k == 0 || x != nums[k - 1]) {
163+
nums[k++] = x;
164164
}
165165
}
166-
return i;
166+
return k;
167167
}
168168
}
169169
```
@@ -173,14 +173,14 @@ public class Solution {
173173
```rust
174174
impl Solution {
175175
pub fn remove_duplicates(nums: &mut Vec<i32>) -> i32 {
176-
let mut len = 0;
176+
let mut k = 0;
177177
for i in 0..nums.len() {
178-
if i == 0 || nums[i] != nums[len - 1] {
179-
nums[len] = nums[i];
180-
len += 1;
178+
if k == 0 || nums[i] != nums[k - 1] {
179+
nums[k] = nums[i];
180+
k += 1;
181181
}
182182
}
183-
len as i32
183+
k as i32
184184
}
185185
}
186186
```
@@ -189,19 +189,19 @@ impl Solution {
189189

190190
```php
191191
class Solution {
192+
192193
/**
193194
* @param Integer[] $nums
194195
* @return Integer
195196
*/
196197
function removeDuplicates(&$nums) {
197-
$fast = $slow = 0;
198-
while ($fast < count($nums)) {
199-
if ($nums[$fast] != $nums[$slow]) {
200-
$nums[++$slow] = $nums[$fast];
198+
$k = 0;
199+
foreach($nums as $x) {
200+
if ($k == 0 || $x != $nums[$k - 1]) {
201+
$nums[$k++] = $x;
201202
}
202-
$fast++;
203203
}
204-
return $slow + 1;
204+
return $k;
205205
}
206206
}
207207
```
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
public class Solution {
22
public int RemoveDuplicates(int[] nums) {
3-
int i = 0;
4-
foreach(int num in nums)
5-
{
6-
if (i < 1 || num != nums[i - 1])
7-
{
8-
nums[i++] = num;
3+
int k = 0;
4+
foreach (int x in nums) {
5+
if (k == 0 || x != nums[k - 1]) {
6+
nums[k++] = x;
97
}
108
}
11-
return i;
9+
return k;
1210
}
1311
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
func removeDuplicates(nums []int) int {
2-
i := 0
3-
for _, num := range nums {
4-
if i < 1 || num != nums[i-1] {
5-
nums[i] = num
6-
i++
2+
k := 0
3+
for _, x := range nums {
4+
if k == 0 || x != nums[k-1] {
5+
nums[k] = x
6+
k++
77
}
88
}
9-
return i
9+
return k
1010
}

0 commit comments

Comments
 (0)