2 Star 1 Fork 0

G_D_BIT/CPP学习代码分享

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Duplicate_zero.cpp 1.50 KB
一键复制 编辑 原始数据 按行查看 历史
G_D_BIT 提交于 8个月前 . 从后往前的双指针问题
class Solution {
public:
void duplicateZeros(vector<int>& arr)
{
//采用双指针的方式从前往后进行复习的话,在进行0的两次复写时,会覆盖掉后面的元素,正难则反,采用从后往前进行复习
//首先,先计算出复写的最后一个元素,为src
//最后一个元素为dest
//持续把src的元素复写道dest
int n = arr.size();
int src = 0, dest = -1;
while (src < n)
{
if (arr[src] == 0)
dest += 2;
else
dest += 1;
if (dest >= n - 1)//注意这里要是满足情况了,就要break,不然++src会导致src来到最后一个复写元素的后面
break;
++src;
}
if (dest == n)//当arr[src] == 0时,但是dest = n - 1,那么为导致复写两个0,造成dest = n而越界
{
arr[n - 1] = 0;
dest -= 2;
src -= 1;;
}
while (src >= 0 && dest >= 0)
{
if (arr[src] != 0)
{
arr[dest] = arr[src];
}
else
{
arr[dest] = 0;
--dest;
arr[dest] = 0;
}
--src;
--dest;
}
}
};
/*
给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。
注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。
示例 1:
输入:arr = [1,0,2,3,0,4,5,0]
输出:[1,0,0,2,3,0,0,4]
解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]
*/
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/GD_BIT/cpp-learning-code-sharing.git
git@gitee.com:GD_BIT/cpp-learning-code-sharing.git
GD_BIT
cpp-learning-code-sharing
CPP学习代码分享
master

搜索帮助