算法(移动零)
5. 给定一个数组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) { //记录非0元素应该放的位置 int noZeroIndex=0; //第一步先把非0的元素放到前面 for(int i=0; i<nums.length; i++){ if(nums[i]!=0){ nums[noZeroIndex]=nums[i]; noZeroIndex++; } } //第二步把剩下的位置全部补成0 for(int i=noZeroIndex; i<nums.length;i++){ nums[i]=0; } } }