第六题看不懂。不做了,有的评论说是大数计算。但是又感觉不想。
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
双指针好吧。前面一个遍历 后面一个遇到零交换位置就完了。比较简单
这样写完,发现改变了相对位置所以这样是不行的。换一个思路。
如果当前不等于0 就把他往前放。使用双指针
class Solution {
public:
void moveZeroes(vector& nums) {
if (nums.size() <= 1)
return;
int front = 0;
for (int tail = 0; tail < nums.size(); ++tail) {
if (nums[tail] != 0) {
nums[front] = nums[tail];
front++;
}
}
while (front < nums.size()) {
nums[front] = 0;
front++;
}
}
};



