顺序表(LeetCode)

个人主页 : 流年如梦

专栏 : 《C语言》 《数据结构》

文章目录

一.移除元素

点击转跳👈

原题:

🧐思路 :用双指针法 ,用一个快指针 遍历整个数组,检查每个元素是否等于val,再用一个慢指针 记录下一个有效元素应该存放的位置;当快指针遇到不等于val的元素时,将其赋值给慢指针位置,然后慢指针向后移动;当遍历结束后,慢指针的位置就是k,直接返回即可

参考代码如下:

c 复制代码
int removeElement(int* nums, int numsSize, int val) {
    int slow = 0;
    for (int fast = 0; fast < numsSize; fast++) {
        if (nums[fast] != val) {
            nums[slow] = nums[fast];
            slow++;
        }
    }
    return slow;
}

二. 删除有序数组中的重复项

点击转跳👈

原题:

🧐思路 :这道题和上一题的思路非常相似,依旧用双指针法;让慢指针slow指向当前唯一元素的末尾位置,快指针fast遍历数组,寻找与前一个元素不同的新元素;当nums[fast] != nums[slow]时,说明遇到了新的唯一元素,将其赋值给nums[slow+1],然后slow++;当遍历结束后,slow+1就是数组去重后的长度

参考代码如下:

c 复制代码
int removeDuplicates(int* nums, int numsSize) {
    if (numsSize == 0) {
        return 0;
    }
    int slow = 0;
    for (int fast = 1; fast < numsSize; fast++) {
        if (nums[fast] != nums[slow]) {
            slow++;
            nums[slow] = nums[fast];
        }
    }
    return slow + 1;
}

三.合并两个有序数组

点击转跳👈

原题:

🧐思路 :这道题与上面两道不同,最优解法要用逆序双指针法(从后往前比) ;拿两个数组末尾的元素比较,谁大就先放到nums1的最后面;一直往前比,直到其中一个数组处理完;如果nums2还有剩下的元素,直接复制到nums1前面就行(nums1剩下的不用管,本来就有序)

参考代码如下:

c 复制代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
    int p1 = m - 1;
    int p2 = n - 1;
    int p = m + n - 1;
    while (p1 >= 0 && p2 >= 0) {
        if (nums1[p1] > nums2[p2]) {
            nums1[p] = nums1[p1];
            p1--;
        } else {
            nums1[p] = nums2[p2];
            p2--;
        }
        p--;
    }
    while (p2 >= 0) {
        nums1[p] = nums2[p2];
        p2--;
        p--;
    }
}

🎯总结

原地数组操作优先考虑双指针 ,快指针遍历筛选,慢指针记录有效位置;有序数组合并优先逆序双指针,避免元素被覆盖

👀 关注 我们一路同行,从入门到大师,慢慢沉淀、稳步成长
❤️ 点赞 鼓励原创,让优质内容被更多人看见
⭐ 收藏 收好核心知识点与实战技巧,需要时随时查阅
💬 评论 分享你的疑问或踩坑经历,一起交流避坑、共同进步

相关推荐
007张三丰6 分钟前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·c语言·c++·内存管理
千千寰宇33 分钟前
[数据库系统] 数据库系统的设计原理研究
数据结构·数据库·database-opengemini/influxdb·database-dament/达梦
Pniubi41 分钟前
力扣55跳跃游戏(贪心)
算法·leetcode·游戏
殷色玫瑰1 小时前
C++ STL:map 与 set 详解——从底层红黑树到实际应用
c语言·数据结构·c++·算法·visualstudio·rpc
字节跳动的猫2 小时前
LikeShop 商品评价体系二开:追评、晒图审核与评价标签筛选功能开发
运维·数据结构·数据库
CoderYanger3 小时前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
LONGZETECH3 小时前
新能源技术实训难题破解:纯电动汽车五大核心系统三维仿真解决方案
大数据·c语言·人工智能·安全·汽车
All for pursuit.3 小时前
【动态规划-8】152.乘积最大子数组
数据结构·c++·算法·leetcode·动态规划
信奥卷王3 小时前
[GESP202512 六级] 路径覆盖
数据结构·算法
INGNIGHT3 小时前
1861 · 老鼠跳跃(坐标型dp)
数据结构·c++