一、思路
题目要求原地修改,如果非原地修改我们可以怎么做?建立一个新的数组,把满足要求的值存到新的数组中。 现在我们可以把原数组也看成这个新的数组,双指针,一个指针 j 表示原数组的指针用来寻找满足条件的值(非val),一个指针 i 表示新数组的指针,用来存储满足条件的值。二、代码
1.python
代码如下:
class Solution:
def removeElement(self, nums, val) :
# 1 非val值覆盖
'''
i,j = 0,0
while j < len(nums):
if nums[j] != val:
nums[i] = nums[j]
i += 1
j += 1
return i
'''
# 2 将前边的val与最后一项交换
i = 0
n = len(nums)
while i < n:
if nums[i] == val:
nums[i] = nums[n-1]
n -= 1
else:
i += 1
return i
2.C++
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int i = 0,n = nums.size();
while(i < n){
if(nums[i]==val){
nums[i] = nums[n-1];
n--;
}
else{
i++;
}
}
return i;
}
};