双指针

最后更新于:2022-04-02 04:21:54

[TOC] ## 题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: ``` 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] ``` ## 思路 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/49/df/49df35b716e46619b229891879d6e405_400x212.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/34/60/34604957cfad39b4b54fc39747323097_400x231.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/38/82/3882e4bbfa0f0601feb063c87f4e6ffd_400x205.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/85/7a/857a75850810e20791af531c29bf61f1_400x210.png) ## 代码 ``` func moveZeroes(nums []int) { // slow 当前指针非零元素所在位置 // fast 遍历元素时的指针 fast, slow, n := 0, 0, len(nums) for fast < n { if nums[fast] != 0 { nums[slow], nums[fast] = nums[fast], nums[slow] slow++ } fast++ } } ```
';