眉山做网站,做家装的网站好,网络销售推广公司,腾讯云网站备案大家好#xff01;我是曾续缘#x1f48b; 今天是《LeetCode 热题 100》系列 发车第 4 天 双指针第 1 题 ❤️点赞 #x1f44d; 收藏 ⭐再看#xff0c;养成习惯 移动零 给定一个数组 nums#xff0c;编写一个函数将所有 0 移动到数组的末尾#xff0c;同时保持非零元素… 大家好我是曾续缘 今天是《LeetCode 热题 100》系列 发车第 4 天 双指针第 1 题 ❤️点赞 收藏 ⭐再看养成习惯 移动零 给定一个数组 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 进阶你能尽量减少完成的操作次数吗 难度❤️ 思路
如果我们开一个新数组然后从头到尾遍历原数组将非零元素搬到新数组中这样非零元素的相对顺序不会改变最后在新数组后加上0元素的个数便可以实现移动0的效果了。但是这样不满足”原地对数组进行操作“的要求。
可以看到新数组的元素都来自原数组并且是非零的那么在遍历原数组的过程中新数组的元素个数一定不会多于原数组也就可以看成是新数组在追原数组既然追不上那不如直接在原数组上追这样又不会影响原数组的遍历。
解题方法
使用j指针指向非零元素的末尾, i指针表示当前遍历的数, 如果当前遍历的数非零, 就赋值到j指针处, 在遍历期间, 指针j是不会超过指针i的. 遍历完后, 将非零元素的末尾全部赋值为0.
Code
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];}}for(int i j; i nums.length; i){nums[i] 0;}}
}