移动零---双指针

https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-liked

        

        将零元素移动到数组尾部,非零元素的相对位置不变。

         这种找特殊数据,并且其他数据相对位置不变的问题,就可以用双指针实现。

        类似我们写的快排的前后指针法一样,一个指针找小,找到小就和另一个指针位置的值交换,直到找小指针越界,这里是同样的思路。

        由于我们最终要将非零的元素放在左边,所以我们就用一个指针去找非零元素,找到非零元素,我们就和另一个指针的位置值交换,然后另一个指针朝下走一步,走到下一个0元素的位置,一个指针继续找非零元素,直到越界。

        如图,代码实现如下:

void Swap(int* a, int* b) {
    int c = *a;
    *a = *b;
    *b = c;
}
void moveZeroes(int* nums, int numsSize) {
    int Zero = 0;
    int NoZero = 0;

    // NoZero去找非零
    while (NoZero < numsSize) {
        if (nums[NoZero] != 0)
            Swap(&nums[Zero++], &nums[NoZero]);
        NoZero++;
    }
}

 

相关推荐

  1. 力扣热题100_指针_283_移动

    2024-01-27 19:18:02       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 19:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 19:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 19:18:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 19:18:02       20 阅读

热门阅读

  1. 使用scyllaDb 或者cassandra存储聊天记录

    2024-01-27 19:18:02       32 阅读
  2. 天梯赛 L3-020 至多删三个字符

    2024-01-27 19:18:02       36 阅读
  3. 《动手学深度学习(PyTorch版)》笔记4.2 4.3

    2024-01-27 19:18:02       34 阅读
  4. Implement Trie (Prefix Tree)

    2024-01-27 19:18:02       27 阅读
  5. Oracle 数据库(卸载)详细过程

    2024-01-27 19:18:02       34 阅读
  6. spring自动配置的原理

    2024-01-27 19:18:02       32 阅读
  7. 【重点问题】攻击面发现及管理

    2024-01-27 19:18:02       35 阅读
  8. 深度学习在医学影像分析中的应用

    2024-01-27 19:18:02       36 阅读