美文网首页
【算法题】26.移动零

【算法题】26.移动零

作者: _涼城 | 来源:发表于2022-03-25 19:21 被阅读0次

题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例1

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例2

输入: nums = [0]
输出: [0]

思路

使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。

右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。

注意到以下性质:

  1. 左指针左边均为非零数;

  2. 右指针左边直到左指针处均为零。

因此每次交换,都是将左指针的零与右指针的非零数交换,且非零数的相对顺序并未改变。

代码实现

void swap(int *a, int *b) {
    int t = *a;
    *a = *b, *b = t;
}

void moveZeroes(int *nums, int numsSize) {
    int left = 0, right = 0;
    while (right < numsSize) {
        if (nums[right]) {
            swap(nums + left, nums + right);
            left++;
        }
        right++;
    }
}

相关文章

  • 【算法题】26.移动零

    题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必...

  • 阿里移动推荐算法(天池新人实战赛之[离线赛])

    阿里移动推荐算法 阿里移动推荐算法前言赛题介绍赛题背景赛题数据评估相关 前言 截止 2020-01-11 02:4...

  • 每日两道算法题 - 移动零

    问题 给定一个数组,在原数组上(在原数组上操作,不能使用新数组)将非0值向前移动,零值向后移动,并保证非零值在操作...

  • 初级算法-移动零

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例:输入: [0...

  • leecode刷题(8)-- 移动零

    leecode刷题(8)-- 移动零 移动零 描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的...

  • 刷算法 - 算法练习

    最近断断续续的刷了一些基础算法题. 我们做移动端开发的, 刷算法题有意义吗? 如果对这个问题有疑问, 可以在读这篇...

  • leetcode算法练习- 移动零

    第一次提交 第一次写了个递归,找到一个0删除一个并记录,最后再加回到数组里面 第二次提交 第二次提交是第一次的升级...

  • 初级算法-数组-移动零

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 说明:必须在原数组...

  • 京涛老师干货大洪荒-谷歌移动搜索算法

    近日京涛老师了解到:谷歌对其移动搜索算法进行了变更.具体详情如下: 随着移动算法的更新,没有使用响应式网站设计的零...

  • 刷leetCode算法题+解析(二十二)

    周末愉快,日常三题。 移动零 题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零...

网友评论

      本文标题:【算法题】26.移动零

      本文链接:https://www.haomeiwen.com/subject/mzpdjrtx.html