Move-Zeroes
第44天。
今天的题目是Move Zeroes:
Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].
Note:
You must do this in-place without making a copy of the array.
Minimize the total number of operations.
这道题目要求我们原地的移动元素,而且还要保持序列本身的顺序。
我们可以利用一下计数排序的思想,反正最后都是0
,我只要算出有几个0
要放在最后,我就可以很方便的产生后缀啦,所以这里先遍历一遍序列记录0
的个数,然后我们发现其实每个元素向前移动多少格是和它前面有多少个0
有关的,so :
1 | void moveZeroes(vector<int>& nums) { |
虽然写的不是很优雅的样子,但是这个思路是正确的,还有dicuss
中的解法也是这个思路。
1 | void moveZeroes(vector<int>& nums) { |