三天精通一种算法之移除数组元素(暴力)(快慢指针)
来看一道例题
第一种暴力解法
On=n*n
结果时间爆了
代码随想录另一种算法
双指针法
On=n
解释如下
var removeElement = (nums, val) => {
// 初始化 k,用于记录非 val 元素的索引
let k = 0;
// 遍历 nums 数组
for(let i = 0; i < nums.length; i++){
// 如果当前元素不等于 val,则将其复制到 nums[k] 的位置,并增加 k
if(nums[i] != val){
nums[k] = nums[i];
k++;
}
}
// 将 nums 的长度设置为 k,这样数组中多余的部分就被删除了
nums.length = k;
// 返回修改后的数组
return nums;
};
这里使用快满指针方法,k作为慢指针,i作为快指针 若快指针指向的索引与不等与val则把num[i]的值覆盖掉慢指针num[k]指向的值