给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
思路:原地把所有零移到数组最后面,保持非零元素次序不变。思路:假设一个数组有n个元素 有x个非零元素,那么最后数组前x个就是非零元素,根据这个,遍历数组,如果非零,把它和数组第1个元素调换,到第二个如果非零和第2个元素调换,以此类推。
这样,前x个元素就会是非零元素,其他都是零。
代码如下:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int temp,count=0;
for(int i=0;i<nums.size();i++)
if(nums[i]!=0)
{
if(count!=i)
{
temp=nums[count];
nums[count]=nums[i];
nums[i]=temp;
}
count++;
}
}
};
耗时占比: