Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情
题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。(出自力扣)
- 示例1
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
- 示例2
输入: nums = [0]
输出: [0]
思路分析
- 据题意可知,将数组里面的零都给放到数组的后面去,其他非零元素按剩下的顺序排序,并且我们需要在不复制数组的情况下对原数组进行操作。
- 首先循环遍历一下原数组,取到每一个元素,判断取到的元素是否等于零,若是不等于零,则不操作它(不管它);若是等于零,那么就用数组的splice方法将此元素切割出来,再用数组的push方法推进数组的后面。
- 若是数组只有一个元素,并且为零,则不需要改动。
AC代码
let nums = [1,3,0,7,9,0,7,2,0]
function moveZeroes(nums) {
let length = nums.length - 1;
for(let i = 0; i<length; i++) {
if(nums[i] === 0) {
let newNum = nums.splice(i, 1);
nums.push(newNum[0])
}
}
console.log(nums);
}
moveZeroes(nums);
总结
这是一个简单的数组运算,由于不能复制数组,只能在原数组,所以需要splice将元素取出来进行操作;复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。