[283. 移动零]力扣(leetcode)看我博客,就明白了,如此简单。

> Problem: [283. 移动零]

[TOC]

# 思路

> 没啥思路,就感觉就简简单单,想一下,给你一个数组,则只需要把非0的移到前面,具体看解题方法。

# 解题方法

> 给你一个数组,[1,2,0,5,0,0,0,9];这么一个数组,接下来模拟一下我的做题思路,使用双指针法,两个指针,都从数组的第一位开始,一个指针设为star,一个设为end,

如果两个指针指向的都是非0数,则两个都向后移动一位

如果star指向0,end也指向0,则end向后移动一位

如果star指向0,end指向非0数,则star指向的数替换为end指向的数,

只有上面三种情况,结束条件为star到达数组的最大长度。

最后使用把star后面指向的数全部替换成0,包含star'此时指向的数。

# 复杂度

- 时间复杂度:

> 添加时间复杂度, 示例: $O(n)$

- 空间复杂度:

> 添加空间复杂度, 示例: $O(n)$

# Code

```Java []

class Solution {

    public void moveZeroes(int[] nums) {

        int star= 0;

        int end = 0;

        int len = nums.length;

        while (end < nums.length){

            int x = nums[star];

            int y = nums[end];

            if (y == 0){

                end++;

                continue;

            }

            if (y != 0 && y != x){

                nums[star] = nums[end];

                star++;

                end++;

                continue;

            }

            star++;

            end++;

        }

        while (star < len){

            nums[star] = 0;

            star++;

        }

    }

}

```

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值