双指针,一个指针用于判断元素大小,还一个定义元素插入的位置
python
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
res = 0
i = 0
j = 0
for i in range(len(nums)):
if nums[i] != val:
nums[j] = nums[i]
j += 1
return
java
class Solution {
public int removeElement(int[] nums, int val) {
int j = 0;
for (int i=0; i < nums.length;i++){
if (nums[i] != val){
nums[j] = nums[i];
j += 1;
}
}
return j;
}
}
C
int removeElement(int* nums, int numsSize, int val) {
int i=0,j=0;
while(i < numsSize){
if(nums[i] != val){
nums[j]=nums[i];
j++;
}
i++;
}
return j;
}
2. 优化双指针
可以改变元素顺序,因此可以一左一右,把右边不是val的替换左边是val的,例如val=1,nums=[1,2,3,4,5],可以直接变成5234
C
int removeElement(int* nums, int numsSize, int val) {
int i=0,j=numsSize;
while(i < j){
if(nums[i]==val){
nums[i]=nums[j-1];
j--;
}
else{
i++;
}
}
return i;
}