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信息
这道题先分析到这里,如果有不当之处,欢迎指正。