文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
移动零
解题思路
双指针 + 遍历。
参考快速排序的思想,确定一个待分割的元素做中间节点 x,然后把所有小于等于 x 的元素放到 x 的左边,大于 x 的元素放到它的右边。
- 初始化两个指针 i 和 j,j 指针用于找中间点 0,i 指针用于找中间点右侧的非 0 元素。
- 如果两个指针指向元素均不为 0,整体向右移动一位。
- 如果 j 指针找到了中间点 0,i 没有找到中间点右侧的非 0 元素,则继续下一轮循环。
- 如果 j 指针找到了中间点 0,i 指针也找到了中间点右侧的非 0 元素,则通过一个临时变量来交换两个元素的值。
代码实现
/**
Do not return anything, modify nums in-place instead.
*/
const moveZeroes = (nums: number[]): number[] => {
let j: number = 0;
for (let i = 0; i < nums.length; i++) {
switch (true) {
case nums[i] !== 0 && nums[j] !== 0:
j++;
break;
case nums[j] === 0 && nums[i] === 0:
continue;
break;
case nums[j] === 0 && nums[i] !== 0:
const tmp: number = nums[i];
nums[i] = nums[j];
nums[j++] = tmp;
break;
default:
return;
}
}
return nums;
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论