返回介绍

移动零

发布于 2024-09-16 00:06:33 字数 1064 浏览 0 评论 0 收藏 0

题目内容

解题思路

双指针 + 遍历。

参考快速排序的思想,确定一个待分割的元素做中间节点 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文