【优选算法篇】2
【优选算法篇】2
这道算法题相对于移动零,就上了一点点强度咯,不过还是很容易理解的啦~题目解析:这道题如果没理解好题目,是很难的,但理解题目就容易啦
讲解算法原理:意思就是:一个数组长度是固定的,里面的元素,只要是0,就需要在原有的基础上,在0的后面多加一个0,以此类推,不为0的数就得往后移动,最后保持原有的数组长度不变,像上图第一个示例的5和0就是因为前面0要写两个,所以要被去掉~编写代码:代
【优选算法篇】2
这道题如果没理解好题目,是很难的,但理解题目就容易啦
意思就是:一个数组长度是固定的,里面的元素,只要是0,就需要在原有的基础上,在0的后面多加一个0,以此类推,不为0的数就得往后移动,最后保持原有的数组长度不变,像上图第一个示例的5和0就是因为前面0要写两个,所以要被去掉~
class Solution
{
public:
void duplicateZeros(vector<int>& arr)
{
int cur = 0, dest = -1;
int n = arr.size();
while (cur < n)
{
if (arr[cur])
dest++;
else
dest += 2;
if (dest >= n - 1)
break;
cur++;
}
if (dest == n)
{
arr[n - 1] = 0;
cur--;
dest -= 2;
}
while (cur >= 0)
{
if (arr[cur])
{
arr[dest--] = arr[cur--];
}
else
{
arr[dest--] = 0;
arr[dest--] = 0;
cur--;
}
}
}
};
我这里实现主要是先遍历一遍数组,如果arr【cur】为非0,则dest走一步,cur++,如果为0,dest则走两步,直到dest到达最后一位,则break,此时cur的位置则为0复写后数组的最后一位数。
注意:在这里需要注意越界问题,如下图:
有一个0越界,直接n-1位置变为0,然后cur--,dest-=2即可!!!
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-21,如有侵权请联系 cloudcommunity@tencent 删除原理遍历基础数组算法#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-19 09:19:26
推荐阅读
留言与评论(共有 9 条评论) |
本站网友 鸡冠花的功效与作用 | 25分钟前 发表 |
则break | |
本站网友 锦福在线 | 3分钟前 发表 |
最后保持原有的数组长度不变 | |
本站网友 郑州耳鼻喉 | 29分钟前 发表 |
直接n-1位置变为0 | |
本站网友 鸿业城市花园 | 5分钟前 发表 |
直接n-1位置变为0 | |
本站网友 原版电驴 | 14分钟前 发表 |
不为0的数就得往后移动 | |
本站网友 伏特加酒精度 | 12分钟前 发表 |
如下图:有一个0越界 | |
本站网友 想减肥早餐吃什么 | 12分钟前 发表 |
dest-=2即可!!!本文参与 腾讯云自媒体同步曝光计划 | |
本站网友 清热解毒胶囊 | 7分钟前 发表 |
在0的后面多加一个0 |