题目要求:删除数组中所有数值等于val的元素(需要进行元素的移动)
库函数注:vector中erase 复杂度O(n)
暴力解法:两层for循环,第一层遍历数组找目标元素,第二层元素进行元素的移动
双指针O(n):定义快慢指针,快指针获取应该在新数组中的值以后,然后把值给慢指针进行覆盖(慢指针的值就是应该放的位置),最后slow就是新数组大小
slow = 0
for(fast = 0;fast < numsize - 1; fast++)
{
if(num[fast]!=val){
num[slow] = num[fast];
slow++; //num[slow++] = num[fast];两句合成一句
}
return slow;
注意:slow实际上指的是下个值应该放的地方,所以最后slow的值就是数组程度,而不需要+1
leetcode实战:
由于原题数组顺序可变,理论上可进一步优化