题目:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例 :
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
题目分析:
首先想到的是笨方法两个for循环,相邻替换,暴力解决。(试了下,用时排在5%左右额)
然后想有没有取巧的方法:
碰到非0数直接移到前面,记录移动次数idx +1,遍历完了后,前idx 位数相当于数组去掉0后剩下的数组。然后把数组后面idx 开始的数都设为0,就相当于把0都移动到了末尾。
这题一开始看题目,总被题目的“把0移动到末尾”迷惑,尤其是移动,就没想到上面的巧方法。
C++代码如下:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int idx = 0;
for (int i = 0; i < nums.size(); ++i){
if (nums[i]!=0){
nums[idx] = nums[i];
idx++;
}
}
for (;idx<nums.size(); ++idx){
nums[idx] = 0;
}
}
};
网友评论