LeetCode系列之 (JavaScript) => 27. 移除元素
题目描述:


解题思路分析:
题目要移除指定的值,可以用到lodash 里面的_.remove() 方法;
可以使用快慢指针,首先快指针是一直移动,如果和指定的值不相等,就改变原有数组慢指针指向的值,慢指针移动一位,如果相等,就只移动快指针,最后返回在数组中不同于指定值的元素个数,即慢指针加1;
不同解法:
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
// self: 使用lodash 的remove 方法,
// 返回移除元素组成的新数组;
// 改变原来数组,变成删除后的数组
var removeElement = function(nums, val) {
_.remove(nums, (v) => v == val);
return nums.length;
};
// 快慢指针
// 快指针:遍历数组; 慢指针:记录不相等的值
// !!! 重点关注慢指针变化 和返回值,slow 已经是加1以后的了
// !!! while循环一定要考虑迭代的变量
var removeElement = function(nums,val){
var fast = 0;
var slow = 0;
var len = nums.length;
// while(fast < len){
// if(nums[fast] != val){
// // console.log('before'+slow)
// nums[slow++] = nums[fast];
// // console.log('after'+slow)
// }
// fast++;
// }
for(fast; fast<len; fast++){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;
}
}
return slow;
}
// 大牛 solution
var removeElement = function(nums,val){
for(var i = 0; len = nums.length, i<len; i++){
if(nums[i] == val){
nums.splice(i,1);
i--; // 非常关键的一步
}
}
return nums.length;
}
// 大牛 solution v2
var removeElement = function(nums,val){
var len = nums.length;
var i = 0;
while(i<len){
if(nums[i] == val){
nums[i]= nums[len-1];
len--;
}else{
i++;
}
}
return len;
}
参考链接:
本文来自博客园,作者:77工作室,转载请注明原文链接:https://www.cnblogs.com/z7luv/p/15931088.html
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。

浙公网安备 33010602011771号