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

🎯总结

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

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

相关推荐
hold?fish:palm1 小时前
9 找到字符串中所有字母异位词
c++·算法·leetcode
Sw1zzle1 小时前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法
青山木2 小时前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
不会就选b2 小时前
算法日常・每日刷题--<归并排序>1
数据结构·算法
危桥带雨2 小时前
排序算法(快排、归并、计数、基数排序)
数据结构·算法·排序算法
啦啦啦啦啦zzzz2 小时前
算法:回溯算法
c++·算法·leetcode
会飞的小新2 小时前
C 标准库之 <fenv.h> 详解与深度解析
c语言·开发语言·microsoft
zephyr053 小时前
数据结构-并查集
数据结构
稚南城才子,乌衣巷风流3 小时前
动态树(Dynamic Tree)数据结构详解
数据结构·算法
爱刷碗的苏泓舒3 小时前
C 语言 if-else 与 switch-case 分支语句对比
c语言·开发语言