题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例 2:
输入: nums =[0]
输出:[0]
思路:
参考冒泡排序思想,利用两个指针L和R,L指向待排序列的头部,R指向已经处理好的序列尾部。
R不断向右移动,每次R指向非零数,则将左右指针对应的数交换,同时L右移。
代码实现:
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function (nums) {
let length = nums.length
//定义两个指针
let l = 0, r = 0
for (let i = 0; i < length; i++) {
num = nums[i]
if (num != 0) {
const t = nums[r]
nums[r] = nums[l]
nums[l] = t
//交换后,左右两个指针分别向右移动
l++
r++
}else{
r++
}
}
};
其他:
为帮助理解,附带两个讲解 冒泡排序和快速排序 的高质量帖子