题目链接:https://leetcode.cn/problems/duplicate-zeros/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Solution { public: void duplicateZeros(vector<int>& arr) { int size = arr.size(); vector<int> tmp(arr); // 临时vector保存原值 int i = 0, j = 0; while (j < size) { // j是填充原始vector arr的下标,要保持vector size不变 if (tmp[i] == 0 && i < size - 1) { // i是临时vector遍历的下标,发现原始数字为0,则要复制一个0 if (j == size - 1) { // 如已经到达arr的末尾,那就只填充1个数字0 arr[j++] = 0; } else { // 如果不是最后一个,就填充2个0到arr,同时要把坐标后移,准备填充下一个元素 arr[j++] = 0; arr[j++] = 0; } } else { // 原始数字不是0,按原始数字填充arr arr[j++] = tmp[i]; } i++; // 继续检查tmp的下一个元素 } } }; |