1、题目:283. 移动零 - 力扣(LeetCode) (leetcode-cn.com)
2、实现
(1)方法一:
- 第一次遍历数组,将非零元素移动到数组的左侧,并使用一个指针j记录非零元素的位置;
- 第二次遍历数组,从非零元素的下一位开始,到数组的末尾,即j~nums.length-1的元素都置为0。
代码:
/*** @param {number[]} nums* @return {void} Do not return anything, modify nums in-place instead.*/
var moveZeroes = function(nums) {let j = 0;// 第一次遍历数组,将所有非0字符串全部移到数组的最左侧for(let i=0; i<nums.length; i++) {if(nums[i] !== 0) {nums[j] = nums[i];j++;}}// 当数组第一次遍历结束,j在非零元素的下一位// 以010312为例,那j为3// 将从j开始的元素置为0for(let i=j; i<= nums.length-1; i++) {nums[i] = 0;}return nums;
};
(2)方法二:参考快速排序的思想(将参考值设置为0)
- 只需要遍历一次数组,如果元素为非零元素,则将其交换到数组左侧,将0交换到数组右侧。
代码:
/*** @param {number[]} nums* @return {void} Do not return anything, modify nums in-place instead.*/
var moveZeroes = function(nums) {let j = 0;for(let i=0; i<nums.length; i++) {// 参考快速排序的思想// 当前元素不为0,交换到左边,等于0的交换到右边if(nums[i] !== 0) {let temp = nums[i];nums[i] = nums[j];nums[j] = temp;j++;}}
};
3、参考:
动画演示 283.移动零 - 移动零 - 力扣(LeetCode) (leetcode-cn.com)
快速排序算法_哔哩哔哩_bilibili
4、补充:快速排序思想