题解 | #数组元素处理#

数组元素处理

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++刷题的题解思路

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 16:22
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司8个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务