题目
给定一个数组 nums
, 编写一个函数将所有 0
移动到它的末尾,同时保持非零元素的相对顺序。
例如, 定义 nums = [0, 1, 0, 3, 12]
,调用函数之后, nums
应为 [1, 3, 12, 0, 0]
。
注意事项:
- 必须在原数组上操作,不要为一个新数组分配额外空间。
- 尽量减少操作总数
分析
1 只需要维护一个id, 这个id记录当前已经确定好的元素的位置,id++
这里有个处理,1 在发现当前遍历到的元素不为0是,是否需要立即赋值,题设中要求尽量减少操作总数,所以这里可以不用赋值为0,因为这样0的位置很有可能不是最终的位置,从而重复写
2 再所有的非0元素确定好自己的位置之后,遍历到数组的末尾,赋值为0,结束
2 基于数组操作时,通常先判断数组是否为空,或者数组的长度是否是小于2, 是的话直接return
代码
class Solution { public void moveZeroes(int[] nums) { if(nums == null || nums.length < 2) return; int insertpos = 0; for(int i : nums){ if(i != 0) nums[insertpos++] = i; } for(int i = insertpos; i < nums.length; i++){ nums[i] = 0; } } }
扫描二维码关注公众号,回复:
55622 查看本文章