您现在的位置是:首页 > 编程 > 

【优选算法篇】2

2025-07-24 05:20:45
【优选算法篇】2 这道算法题相对于移动零,就上了一点点强度咯,不过还是很容易理解的啦~题目解析:这道题如果没理解好题目,是很难的,但理解题目就容易啦 讲解算法原理:意思就是:一个数组长度是固定的,里面的元素,只要是0,就需要在原有的基础上,在0的后面多加一个0,以此类推,不为0的数就得往后移动,最后保持原有的数组长度不变,像上图第一个示例的5和0就是因为前面0要写两个,所以要被去掉~编写代码:代

【优选算法篇】2

这道算法题相对于移动零,就上了一点点强度咯,不过还是很容易理解的啦~题目解析:

这道题如果没理解好题目,是很难的,但理解题目就容易啦

讲解算法原理:

意思就是:一个数组长度是固定的,里面的元素,只要是0,就需要在原有的基础上,在0的后面多加一个0,以此类推,不为0的数就得往后移动,最后保持原有的数组长度不变,像上图第一个示例的5和0就是因为前面0要写两个,所以要被去掉~

编写代码:代码语言:javascript代码运行次数: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组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1143463.html

相关标签:无
上传时间: 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