福州网站开发系列,网站推广优势,公司注册,国内网站有哪些千万不要被这道题标注着“简单”迷惑了#xff0c;实际上需要注意的细节很多。
题目描述#xff1a; 解题思路#xff1a;
正序遍历#xff0c;确定结果数组的最后一个元素所在的位置#xff1b;知道最后一个元素的位置后倒序进行填充。
先找到最后一个需要复写的数 先…千万不要被这道题标注着“简单”迷惑了实际上需要注意的细节很多。
题目描述 解题思路
正序遍历确定结果数组的最后一个元素所在的位置知道最后一个元素的位置后倒序进行填充。
先找到最后一个需要复写的数 先判断cur位置的值决定dest向后移动一步还是两步判断dest是否已经到结束位置cur处理边界情况dest超过arr.size()-1的情况 从后向前完成复写的操作
代码
class Solution {
public:void duplicateZeros(vectorint arr) {int cur 0;int dest -1;while(cur arr.size()){if(arr[cur] 0){dest 2;}else{dest;}if(dest arr.size() - 1){break;}cur;}if(dest arr.size() - 1){arr[arr.size() - 1] 0;cur--;dest - 2;}while(cur 0){if(arr[cur] ! 0){arr[dest] arr[cur];dest--;cur--;}else{arr[dest] 0;arr[dest - 1] 0;cur--;dest - 2;}}}
};
结果