题目链接如下:
思路1.暴力解法,此时需要遍历一遍数组,然后再把相同的给去掉,这又需要遍历一遍数组。
故此时时间复杂度为O(n*n),在leetcode上可以过去。
还有另外一种解法就是双指针解法,此时时间复杂度可以降低为O(n)
所谓双指针,就是指在一个循环里面,用快指针和慢指针两个指针来同时操作循环,定义快慢指针:
快指针在这里代表:新数组的元素,新数组就是不含有目标元素的数组。
慢指针在这里代表:更新新数组的下标位置
代码如下:
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];//新数组中元素的个数就加1
}
return slowIndex;//返回新数组中元素的个数
}
};