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

🎯总结

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

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

相关推荐
CSharp精选营1 天前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
To_OC2 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC2 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
To_OC3 天前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
To_OC4 天前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
To_OC4 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
刘马想放假5 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠6 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
To_OC6 天前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
To_OC7 天前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode