@@ -65,6 +65,16 @@ for (int i = 0; i < len; i++) {
65
65
66
66
<!-- 这里可写通用的实现逻辑 -->
67
67
68
+ ** 方法一:一次遍历**
69
+
70
+ 我们用变量 $k$ 记录当前不等于 $val$ 的元素个数。
71
+
72
+ 遍历数组 $nums$,如果当前元素 $x$ 不等于 $val$,则将 $x$ 赋值给 $nums[ k] $,并将 $k$ 自增 $1$。
73
+
74
+ 最后返回 $k$ 即可。
75
+
76
+ 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 $nums$ 的长度。
77
+
68
78
<!-- tabs:start -->
69
79
70
80
### ** Python3**
@@ -74,13 +84,12 @@ for (int i = 0; i < len; i++) {
74
84
``` python
75
85
class Solution :
76
86
def removeElement (self , nums : List[int ], val : int ) -> int :
77
- cnt, n = 0 , len (nums)
78
- for i in range (n):
79
- if nums[i] == val:
80
- cnt += 1
81
- else :
82
- nums[i - cnt] = nums[i]
83
- return n - cnt
87
+ k = 0
88
+ for x in nums:
89
+ if x != val:
90
+ nums[k] = x
91
+ k += 1
92
+ return k
84
93
```
85
94
86
95
### ** Java**
@@ -90,14 +99,13 @@ class Solution:
90
99
``` java
91
100
class Solution {
92
101
public int removeElement (int [] nums , int val ) {
93
- int cnt = 0 , n = nums. length;
94
- for (int i = 0 ; i < n; ++ i) {
95
- if (nums[i] == val)
96
- ++ cnt;
97
- else
98
- nums[i - cnt] = nums[i];
102
+ int k = 0 ;
103
+ for (int x : nums) {
104
+ if (x != val) {
105
+ nums[k++ ] = x;
106
+ }
99
107
}
100
- return n - cnt ;
108
+ return k ;
101
109
}
102
110
}
103
111
```
@@ -108,18 +116,32 @@ class Solution {
108
116
class Solution {
109
117
public:
110
118
int removeElement(vector<int >& nums, int val) {
111
- int cnt = 0, n = nums.size();
112
- for (int i = 0; i < n; ++i) {
113
- if (nums[ i] == val)
114
- ++cnt;
115
- else
116
- nums[ i - cnt] = nums[ i] ;
119
+ int k = 0;
120
+ for (int x : nums) {
121
+ if (x != val) {
122
+ nums[ k++] = x;
123
+ }
117
124
}
118
- return n - cnt ;
125
+ return k ;
119
126
}
120
127
};
121
128
```
122
129
130
+ ### **Go**
131
+
132
+ ```go
133
+ func removeElement(nums []int, val int) int {
134
+ k := 0
135
+ for _, x := range nums {
136
+ if x != val {
137
+ nums[k] = x
138
+ k++
139
+ }
140
+ }
141
+ return k
142
+ }
143
+ ```
144
+
123
145
### ** JavaScript**
124
146
125
147
``` js
@@ -129,45 +151,29 @@ public:
129
151
* @return {number}
130
152
*/
131
153
var removeElement = function (nums , val ) {
132
- let cnt = 0;
133
- const n = nums.length;
134
- for (let i = 0; i < n; ++i) {
135
- if (nums[i] == val) ++cnt;
136
- else nums[i - cnt] = nums[i];
137
- }
138
- return n - cnt;
139
- };
140
- ```
141
-
142
- ### ** Go**
143
-
144
- ``` go
145
- func removeElement (nums []int , val int ) int {
146
- cnt , n := 0 , len (nums)
147
- for i := 0 ; i < n; i++ {
148
- if (nums[i] == val) {
149
- cnt++
150
- } else {
151
- nums[i - cnt] = nums[i]
154
+ let k = 0 ;
155
+ for (const x of nums) {
156
+ if (x !== val) {
157
+ nums[k++ ] = x;
152
158
}
153
159
}
154
- return n - cnt
155
- }
160
+ return k;
161
+ };
156
162
```
157
163
158
164
### ** Rust**
159
165
160
166
``` rust
161
167
impl Solution {
162
168
pub fn remove_element (nums : & mut Vec <i32 >, val : i32 ) -> i32 {
163
- let mut len = 0 ;
169
+ let mut k = 0 ;
164
170
for i in 0 .. nums . len () {
165
171
if nums [i ] != val {
166
- nums [len ] = nums [i ];
167
- len += 1 ;
172
+ nums [k ] = nums [i ];
173
+ k += 1 ;
168
174
}
169
175
}
170
- len as i32
176
+ k as i32
171
177
}
172
178
}
173
179
```
0 commit comments