1>暴力求解法(时间复杂度O(n^2),空间复杂度度为O(1)):
先是遍历每一个数,遇到目标val,进入内循环,后面元素向前移动,但是有两个很重要的点。一个是我们两个for循环的判断条件不是小于nums.size(),而是最开始创建一个变量sz先接受数组初始大小,然 后每找到val时sz递减,因为已经删掉一个元素了,元素前移后,末端 的元素我们不需要再访问了,并且外循环的i(内循环用j)
也要递减,因为后面元素前移,说明未访问的元素位置都减小了。如果这两点不注意,会超时的。
2>快慢指针法(时间复杂度为O(n),空间复杂度为O(0)):
快慢指针其实就如其名。因为无论nums[fastPtr]是否等于val,fastPtr都会自增, 而slowPtr只有当nums[fastPtr]不等于val时才会将值赋值给nums[slowPtr],就相当于遇到了val,我们直接跳过了它。最后因为slowPtr自增, 那么直接返回slowPtr就是数组大小
/暴力求解:
class Solution {
public:
int removeElement(vector& nums, int val)
{
int sz=nums.size();
for(int i=0;i& nums, int val)
{
int slowPtr=0;
int fastPtr;
for(fastPtr=0;fastPtr



