移动零

93 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

移动零

题目

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

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

进阶:你能尽量减少完成的操作次数吗?

题目分析

这道题题目难度不算大,也有很多解法,题目中要求我们尽量减少完成的操作次数,这里我们基于快速排序的思想,使用一次遍历就得到我们想要的结果

代码实现

这是代码的实现:

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

            }
        }
    }
}

这是我用java实现的功能,每个题都用不同的解法和写法,我大体整理了一下自己的思路然后就写了,也没有再想其他的方法,如果你有更好的解法,欢迎和我留言,我们一起进步,一起学习数据结构,共同进步,通过这道题能更熟悉数组的移动零的使用和操作。

除此之外还可以有别的解决思路,比如使用双指针,这里就不细说了

小知识

幂等是分布式系统中需要保证的一个问题,实现幂等有很多解决方案,这里我简单罗列一下,有使用唯一索引,还可以使用token机制,就是提交数据的时候先获取token,后台校验token并删除token表示校验成功,可以使用redis来存储token信息,还可以使用traceid来进行保证幂等

总结

本篇文章主要解决了数组的移动零的问题,主要考察的是双指针的知识点,并利用了快速排序的思想,同时这里简单说了一下幂等性的解决方法有哪些,可以使用唯一索引,token机制,traceId等等技术方案,使用token机制,就是提交数据的时候先获取token,后台校验token并删除token表示校验成功,使用我们常用的edis来存储token信息

这道题先分析到这里,如果有不当之处,欢迎指正。