算法修炼第一天

本文介绍如何使用Java编程语言实现将数组中的所有0移动到数组的最后,通过遍历和替换非目标值,然后逐个添加0,达到O(n)的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法修炼第一天

1.问题:

给定一个数组如何将数组中的指定的元素移动到数组的最后面,例如给定数组 [0, 1, 0, 3, 12]如何将数组中的0排到最后?

2.思路:

将指定元素移动到最后,第一步想的肯定是要遍历该数组判断数组中的元素有哪些是等于你给定的值的,哪些是不等于给定的值,既然要把目标元素移动最后,那就反过来思考先将不是目标元素的移动,然后再数组的末尾添加给定的目标值,直到到达数组的容量,因为我们是知晓数组的容量的和给定的需要移动的目标值的,只需要往后面添加就可以

3.代码

public class MoveZero {
    public static void main(String[] args) {
        int [] moveZeroArr= {0, 1, 0, 3, 12};
        System.out.println(Arrays.toString(moveZero(moveZeroArr)));
    }

    private  static  int [] moveZero(int [] arr){
        if(arr==null ||arr.length==0){
            return arr;
        }
        //定义一个变量
        int index=0;
        for (int num : arr) {
            //遍历数组中的元素,如何数组中的元素不是给定的目标值,则将数组中对应的下标的值替换成不为目标值的
            if(num!=0){
                arr[index++]=num;
            }
        }
        //直接往数组中添加给定的所需要移动的目标值,当数组中的长度大于元数组中的长度时退出
        while (index<arr.length){
            arr[index++]=0;

        }
        return arr;
    }
}

4.总结

该方式主要用到的就是反向思考,因为一个数组中的元素个数是确定的,移动完不是目标值的数据后,剩下的就是我们想要添加的元素,并且个数是知道的,时间复杂度是O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值