LeetCode第283题——移动零
题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0]
示例 2:
输入: nums = [0] 输出: [0]
思路:
-
题目要求是不允许复制数组,也就是说我们需要在原数组之上修改使其实现移动0的效果,而且需要保持非零元素之间的相对顺序 因为是数组,所以可以直接获取到数组的长度len,那么我们可以先不去理会0,遍历数组,每遇到一个非零元素就将其赋值到左边(额外设置一个count标识下一个要赋值的下标),这样的话,在遍历完数组一遍后,我们也就将全部非零元素全部按照相对顺序推到了最左边,之后数组剩余的所有还没有赋值的下表那么就自然而然的全是零了。直接赋值即可
实现代码与结果:
class Solution { public void moveZeroes(int[] nums) { int len = nums.length; int count = 0; for(int i=0;i<len;i++){ if(nums[i] != 0){ nums[count++] = nums[i]; } } while(count < len){ nums[count++] = 0; } } }
上一篇:
92天倒计时,蓝桥杯省赛备赛攻略来啦~
下一篇:
中高级Linux运维工程师经典面试题汇总