题解 | #数组元素处理#
数组元素处理
https://www.nowcoder.com/practice/bb840c11be674d01b582847a6921d384
1. 解法1:两层for循环遍历
void func(int* p, int n) {
// write your code here......
int temp;
for (int *q1 = p; q1 != p + n; ++q1)
{
if (*q1 == 0)
{
for (int *q2 = q1; q2 != p+n-1; ++q2)
{
temp = *q1;
*(q2) = *(q2+1);
}
*(p+n-1) = 0;
}
}
}
碰到非0的元素整体把后面的元素前移。
2. 解法2:双指针
void func(int* p, int n) {
// write your code here......
int *q1 = p;
int cnt = 0;
for (int i = 0; i < n; ++i)
{
if(*p != 0)
{
*q1 = *p;
++q1;
++cnt;
}
p++;
}
for (int i = cnt; i < n; ++i)
{
*q1 = 0;
++q1;
}
}
使用双指针,p是fast,q1是slow,p一直移动, 如果p的值不是0,赋值给q1, q1也移动,q1要确保前面都是非零值,p遍历完以后,q1后面的所有元素全部赋值为0。像题解一样交换零也是可以的
C++题解 文章被收录于专栏
记录在牛客网用C++刷题的题解思路
上海得物信息集团有限公司公司福利 1166人发布
查看12道真题和解析