移动0到数组末尾
只移动0,其他顺序不变;必须在元素组进行操作
会改变原数组内的值类型
const moveZeroByReg = (arr = [1,0,2,0,3,0,4,0,5]) => { const reg = /0/g let str = arr.join('') const res = str.match(reg) str = str.replace(reg, '') str += res.join('') arr = str.split('') return arr }
使用splice 时间复杂度O(n^2)
const removeZeroBySplice = (arr = [1,0,2,0,3,0,4,0,5]) => { const { length } = arr let zeroCount = 0 for(let i = 0; i < length - zeroCount; i++ ){ if(arr[i] === 0){ arr.splice(i,1) arr.push(0) i-- zeroCount++ } } return arr }
双指针
/** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ const moveZeroes = (nums) => { let zeroIndex = nums.indexOf(0) if (zeroIndex === -1) return nums for (let i = 0; i < nums.length; i++) { const v = nums[i] if (v !== 0 && i > zeroIndex) { [nums[zeroIndex], nums[i]] = [nums[i], nums[zeroIndex]] zeroIndex++ } } return nums };
以自己现在的努力程度,还没有资格和别人拼天赋