复写零问题
复写零问题
一·题目:leetcode原题链接:. - 力扣(LeetCode) 二·思路汇总:思路:此题要求原数组修改故,放弃两个指针位于不同数组操作,而正向两个指针操作会覆盖数据,故选择反向两个指针操作解决此问题但是需要让我们的cur指向操作后数组的最后一个位置的值处(如示例一就是指向4)而dest指向最后一个位置(此处有个特殊情况就是当它复写后出现一个零在末尾,而另一个0在数组外,此时des
复写零问题
leetcode原题链接:. - 力扣(LeetCode)
思路:此题要求原数组修改故,放弃两个指针位于不同数组操作,而正向两个指针操作会覆盖数据,故选择反向两个指针操作解决此问题
但是需要让我们的cur指向操作后数组的最后一个位置的值处(如示例一就是指向4)而dest指向最后一个位置(此处有个特殊情况就是当
它复写后出现一个零在末尾,而另一个0在数组外,此时dest指向的n位置,可以最后在操作)最后反向遍历即可
class Solution {
public:
void duplicateZeros(vector<int>& arr) {
int cur=0,dest=-1,n=arr.size();
while(cur<n){//考虑到为1,2,的情况可以等于n-1;
if(arr[cur]){
dest++;
}
else{
dest+=2;
}
cur++;//此处cur++;到最后cur就在预期的下一个位置,故之后--一下
if(dest>=n-1){
break;
}
}
if(dest==n){
dest-=2;
arr[n-1]=0;//处理dest越界,如:[8,4,5,0,0,0,0,7] 变为 [8,4,5,0,0,0,0,0]的情况
cur--;
}
//到此处cur就变为我们预期位置的下一个,综合越界和不越界--一下;
cur--;
while(cur>=0){
if(arr[cur]){
arr[dest--]=arr[cur--];
}
else{
arr[dest--]=0;
arr[dest--]=0;
cur--;
}
}
}
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-2,如有侵权请联系 cloudcommunity@tencent 删除数据数组指针int遍历 #感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-18 19:49:37
上一篇:链表求和问题(面试题)
推荐阅读
留言与评论(共有 11 条评论) |
本站网友 redhat下载 | 10分钟前 发表 |
n=arr.size(); while(cur<n){//考虑到为1 | |
本站网友 桦树茸的功效 | 1分钟前 发表 |
void duplicateZeros(vector<int>& arr) { int cur=0 | |
本站网友 北京本家润园 | 21分钟前 发表 |
复写零问题 一·题目:leetcode原题链接:. - 力扣(LeetCode) 二·思路汇总:思路:此题要求原数组修改故 | |
本站网友 蒙药 | 8分钟前 发表 |
dest=-1 | |
本站网友 19e数字便民 | 18分钟前 发表 |
而另一个0在数组外 | |
本站网友 金昌小区 | 16分钟前 发表 |
0 | |
本站网友 甘茂 | 25分钟前 发表 |
0 | |
本站网友 倪净 | 4分钟前 发表 |
综合越界和不越界--一下; cur--; while(cur>=0){ if(arr[cur]){ arr[dest--]=arr[cur--]; } else{ arr[dest--]=0; arr[dest--]=0; cur--; } } } };本文参与 腾讯云自媒体同步曝光计划 | |
本站网友 铁东二手房 | 18分钟前 发表 |
0 | |
本站网友 曦城花语 | 6分钟前 发表 |
复写零问题 一·题目:leetcode原题链接:. - 力扣(LeetCode) 二·思路汇总:思路:此题要求原数组修改故 |