题目要求是在不复制数组的情况下对原数组进行操作
为了保持非0元素的相对顺序,我们肯定选择从头到尾遍历,把不是0的元素往前提,如果是0或者不是0我们都可以记录(二选一),最后我们补上0的个数即可
对于某一个不是0的元素,如果他是第n个不是0的元素,那么可以把他放到索引为n-1的地方,这样可以保证按照顺序来。其实这也是一个小小的递推:第n个都是这样,那第n-1个,第n-2个…第3个,第2个都是这样,那么就可以保证保持非0元素的相对顺序而且目前数组中不出现0元素了
我们记录下非0元素的个数flag
,根据数组的长度,把其余元素的值赋为0即可
AC代码如下:
int flag = 0;
for (int i = 0; i < nums.size(); ++ i) {
if (nums[i] != 0) {
flag ++;
nums[flag - 1] = nums[i];
}
}
if (flag > 0) {
for (int i = flag; i < nums.size(); ++ i) {
nums[i] = 0;
}
}