leetcode 283 + java + 双指针

题目描述

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:

输入: nums = [0]
输出: [0]

思路

双指针
一个快指针
一个慢指针

循环遍历数组

终止条件为快慢指针,都到达数组末尾为止。
快指针先到达,
满指针随后到达。

在移动过程中,快指针,如果是 非0, 快指针,移动,同时慢指针移动
如果是 0, 快指针继续移动
慢指针不移动。
知道快指针移动到最后。

然后,慢指针,开始移动,移动到最后。

Loop through array

The termination condition is the fast and slow pointers until they reach the end of the array.

Come on, the first pointer arrives first,the slow pointer then arrives.

In the process of moving, the fast pointer. If it is non-0, the fast pointer moves and the slow pointer moves at the same time

If it is 0, the fast pointer continues to move
Slow pointer does not move.

fast the pointer moves to the end.

Then, the slow pointer, start moving, and move to the end.

代码

class Solution {
    public void moveZeroes(int[] nums) {
        
        int j = 0;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] != 0){
                nums[j++] = nums[i];
            }
        }

        while (j < nums.length) {
            nums[j++] = 0;
        }
        
    }
}

Reference

链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2ba4i/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值