<leetcode修炼>双指针训练-移动零

题目:

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。

方法1:

快慢指针
快指针负责遍历数组中所有元素,慢指针负责记录不为0的元素,最后慢指针所在下标位置及其后边位置的元素置位0即可
public void moveZeroes1(int[] nums){
if (nums.length == 0) {
return;
}

    int fast = 0;
    int slow = 0;
    while (fast

方法2:

左右指针玩法
如果当前位置为0,只移动右指针
如果当前位置不为0,就把左右指针的数据交换,左右指针再又移动,这样左指针始终在非0位置的尾部
遇到0右指针移动快
不遇到0两个指针在一块,差距就是0值的多少
public void moveZeroes2(int[] nums){
if(numsnull||nums.length0){
return;
}

    int n = nums.length;
    //左指针
    //右指针
    //右指针来到不为0的位置,就左右指针的位置交换,左指针来到非0位置的结尾。
    int left=0,right=0;
    while(right

你可能感兴趣的:(算法,leetcode,算法,数据结构)