赞
踩
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
我的解法可以通过,而且时间能打败99.98%的Java
思路就是找出有几个0。然后遍历数组,不是0的数就顺序往前放。再把最后几个位置全都赋值为0。
class Solution { public void moveZeroes(int[] nums) { int count = 0; for (int i = 0; i < nums.length; i++) { if (nums[i] == 0) { count++; } } int pos = 0; int nonZeroCount = nums.length - count; for (int j = 0; j < nums.length; j++) { if (nums[j] != 0) { nums[pos] = nums[j]; pos++; } } for (int k = nonZeroCount; k < nums.length; k++) { nums[k] = 0; } } }
官方解法
思路就是用两个指针,左指针保持指向第一个0,右指针往后寻找需要移动到0前面去的元素(如果前面没有0的话是自己和自己交换),找到了就交换,交换之后左右指针都应该往后移动一格。
class Solution { public void moveZeroes(int[] nums) { int n = nums.length, left = 0, right = 0; while (right < n) { if (nums[right] != 0) { swap(nums, left, right); left++; } right++; } } public void swap(int[] nums, int left, int right) { int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; } } 作者:力扣官方题解 链接:https://leetcode.cn/problems/move-zeroes/solutions/489622/yi-dong-ling-by-leetcode-solution/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。