顺序表(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--;
    }
}

🎯总结

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

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

相关推荐
小欣加油1 小时前
leetcode56 合并区间
c++·算法·leetcode·职场和发展
Hello:CodeWorld4 小时前
C 风格变参 vs C++ 变参模板:核心区别与选型指南
c语言·c++·算法
8Qi85 小时前
LeetCode 516:最长回文子序列
算法·leetcode·职场和发展·动态规划
十月的皮皮6 小时前
C语言学习笔记20260606- 求月份天数三种写法
c语言·笔记·学习
想要成为糕糕手6 小时前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
caimouse6 小时前
Reactos 第 5 章 进程与线程 — 5.8 Windows 的 APC 机制
c语言·windows
tyung8 小时前
Go 手写 Wait-Free SPSC 无界队列:无 CAS、无锁、泛型节点池
数据结构·后端·go
努力攻坚操作系统9 小时前
编程语言编译运行机制对比:C / Java / Python
java·c语言·python
Chen_harmony9 小时前
一、数据结构概念和复杂度计算
数据结构
小欣加油9 小时前
leetcode287寻找重复数
数据结构·c++·算法·leetcode