Leetcode刷题100天—283. 移动零(双指针)—day20

Posted 神的孩子都在歌唱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—283. 移动零(双指针)—day20相关的知识,希望对你有一定的参考价值。

前言:

作者:神的孩子在歌唱

大家好,我叫运智

283. 移动零

难度简单1198收藏分享切换为英文接收动态反馈

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

示例:

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

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。
package 双指针;

public class _283_移动零 {
//通过双指针,首先都指向0坐标,如果遇到非零数就互相交换,否则右指针向右移动
    public void moveZeroes(int[] nums) {
    	int left=0,right=0;
//    	循环终止是right到达最右边时候
    	while(right<nums.length) {
    		if (nums[right]!=0) {
//    			交换顺序
				swap(nums, left, right);
				left++;
				right++;
			}else {
//				否则向右移动
				right++;
			}
    	}
    }
    public void swap(int[] nums,int left ,int right) {
//    	这里的nums[left]一直都是0,除了第一个
    	int temp=nums[right];
    	nums[right]=nums[left];
    	nums[left]=temp;
    }
}
/*
 * 解析:0 0 3 0 1 2
 * 第一次循环开始:left=0 right=0 nums[left]=0 nums[right]=0	 nums=0
 * 第二次循环开始:left=0 right=1 nums[left]=0 nums[right]=0  nums= 0 0
 * 第三次循环开始:left=0 right=2 nums[left]=0 nums[right]=3  这时候交换位置nums= 3 0 0
 * 第四次循环开始:left=1 right=3 nums[left]=0 nums[right]=0  nums =3 0 0 0
 * 第五次循环开始:left=1 right=4  nums[left]=0 nums[right]=1  这时候交换位置nums =3 1 0 0 0
 * 第六次循环开始:left=2 right=5  nums[left]=0 nums[right]=2  这时候交换位置nums =3 1 2 0 0 0
 * 最后right=6>n
*/

本人csdn博客:https://blog.csdn.net/weixin_46654114

转载说明:跟我说明,务必注明来源,附带本人博客连接。

以上是关于Leetcode刷题100天—283. 移动零(双指针)—day20的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 20天算法刷题计划第三天:双指针

LeetCode刷题283-简单-移动零

LeetCode刷题283-简单-移动零

LeetCode第5天 - 283. 移动零 | 167. 两数之和 II - 输入有序数组

283. 移动零--LeetCode__双指针

leetcode 283. 移动零(双指针)