暴力解法c++:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int s = nums.size();
for(int i = 0; i < s; i++){
if(nums[i] == val){ 发现需要移除的元素,就将数组集体向前移动一位
for(int j = i; j < s-1; j++){
nums[j] = nums[j+1];
}
s--;// 此时数组的大小-1
i--;// 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
}
}
return s;
}
};
双指针法
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slowindex = 0;
for(int fastindex = 0; fastindex < nums.size(); fastindex++){
if(val != nums[fastindex]){
nums[slowindex++] = nums[fastindex];
}
}
return slowindex;
}
};
go:
func removeElement(nums []int, val int) int {
slowindex := 0
for fastindex := 0; fastindex < len(nums); fastindex++{
if(nums[fastindex] != val){
nums[slowindex] = nums[fastindex]
slowindex++
}
}
return slowindex
}