LeetCode系列之 (JavaScript) => 27. 移除元素
阿新 • • 發佈:2022-02-24
題目描述:
解題思路分析:
題目要移除指定的值,可以用到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; }