Introduction
Question: 283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解法一
Analysis
有点像是插入排序,保证nums[0:j]之间的元素是已经处理过的,同时nums[i:j]之间的元素为0。然后尝试将nums[j]插入进去,如果nums[j] == 0,则无需处理,移动j即可;如果nums[j] != 0,则swap(nums[j], nums[i]),同时移动i和j。
事实上还能用归并排序类似的方式做,但是太傻比了。。。
Implement
1 | void moveZeroes(vector<int>& nums) { |