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]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
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的主要内容,如果未能解决你的问题,请参考以下文章