【鼠鼠优选算法-双指针】001:移动零 & 002:复写零

🎈主页传送门****:良木生香

🔥个人专栏:《C语言》《数据结构-初阶》

🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离



在学习了这么多基础知识之后,我们就从今天开始操练一下我们的基本技能吧,先来两道简单的题目试试手:

1.移动零:题目链接~~~

2.复写零:复写零

那我们就一题一题来讲讲吧~~~

一、移动零

题目描述:

看到题目,这道题是想让我们将一个数组中的所有0移动到数组的末尾.

题目意思明了,但是我们该怎么操作呢?

在这道题中我们第一个想到的就是重新创建新的数组,将数值不为0的元素移动到新的数组中,但是题目明确要求说了,只能再原地进操作,我们该怎么实现这个操作呢?又不能创建新的数组不急,我有妙招.

原理解析:

在这道题目中,我们可以用两个指针,curren t和**dentist,**一个用来遍历整个数组,另一个用来处理当下的数据

当cur遍历到值为0的元素时,就与dest交换,随后两者同时向后移动一步

但是不管cur碰到的元素是否等于0,都会向后移动一步

代码实现:

下面是用C语言实现的代码:

cpp 复制代码
void Swap(int*a,int*b){
    int temp = 0;
    temp = *a;
    *a = *b;
    *b = temp;
}

void moveZeroes(int* nums, int numsSize) {
    int current = 0;
    int dentist = 0;
    while(current<=numsSize-1){
        if(nums[current]!=0){
            Swap(nums+dentist,nums+current);
            dentist++;
        }
        current++;
    }
}

我们将这段代码提交到力扣平台上,看看运行结果:

显然,通过了,那么以上就是这道题的题解了~~~

二、复写零

题目描述:

这道题目的意思是想让我们在对于数组中的0元素复写一遍,也就是把0再写一遍,而且不用管数组后面的元素,可以被覆盖掉.我们可以通过下面的思路进行解题:

原理解析:

在这道题中,我们首先想到的方法就是从前向后把元素都遍历一遍,在碰到0的时候就再往后移动一次写一个0,但是这样我们会发现,在复写的过程中,会把0元素后面的非零元素给覆盖掉,很显然,从前往后这种方法是行不通的,那我们不妨试试从后往前呢.

想要实现从后往前复写,我们就要找出在原数组中会被复写到的最好一个元素,这样才知道我们要性哪里开始复写.这样的话我们的思路就明了了:

1.先找出最后被复写到的元素

2.判断倒数第二个元素是不是0元素,如果是,那就直接将最后两个元素置为0

3.从后向前实现复写操作

详细代码如下:

cpp 复制代码
void duplicateZeros(int* arr, int arrSize) {
    //第一步:先找出最后一个元素:
    int cur=0;
    int dest=-1;
    while(cur<arrSize){
        if(arr[cur]){
            dest++;
        }
        else{
            dest+=2;
        }
        if(dest>=arrSize-1) break;
        cur++;
    }
        //现在另外判断边界情况,也就是说,只有倒数第二个是0的这种情况
    if(dest==arrSize){
        arr[arrSize-1] = 0;
        cur--;
        dest-=2;

    }

现在我们将代码提交到平台上看看结果:

显然是通过的,那么这就是这道题的所有题解啦~~~~~

文章是自己写的哈,有什么描述不对的、不恰当的地方,恳请大佬指正,看到后会第一时间修改,感谢您的阅读~~~~

相关推荐
小O的算法实验室1 天前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生1 天前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿1 天前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz1 天前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能1 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能1 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo1 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ01 天前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法