移动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
};
以自己现在的努力程度,还没有资格和别人拼天赋

浙公网安备 33010602011771号