“三指针法“合并两个有序数组(力扣每日一练)

我的第一想法确实是:先合并数组,再排序,搞完。

哈哈哈,想那么多干嘛,目的达成了就好了。

力扣官方题解是双指针:

还有糕手:

Python:
python 复制代码
def merge(nums1, m, nums2, n):
    # 两个指针分别指向 nums1 和 nums2 的最后一个元素
    p1 = m - 1
    p2 = n - 1
    # 指向 nums1 的最后一个位置
    p = m + n - 1

    # 当 nums1 和 nums2 都还有元素时,比较它们的最后一个元素并将较大的元素放在 nums1 的正确位置上
    while p1 >= 0 and p2 >= 0:
        if nums1[p1] < nums2[p2]:
            nums1[p] = nums2[p2]
            p2 -= 1
        else:
            nums1[p] = nums1[p1]
            p1 -= 1
        p -= 1

    # 如果 nums2 还有剩余元素,将它们复制到 nums1 的剩余位置上
    nums1[:p2 + 1] = nums2[:p2 + 1]
C#:
cs 复制代码
public void Merge(int[] nums1, int m, int[] nums2, 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] = nums2[p2];
            p2--;
        } else {
            nums1[p] = nums1[p1];
            p1--;
        }
        p--;
    }

    while (p2 >= 0) {
        nums1[p] = nums2[p2];
        p--;
        p2--;
    }
}

总结

可以称之为"三指针" 方法,因为我们同时使用了三个指针(p1、p2 和 p)来操作和遍历两个数组。每个指针都有其特定的用途:

  • p1 指向 nums1 中的元素
  • p2 指向 nums2 中的元素
  • p 指向 nums1 中应该放置下一个元素的位置

然而,你也可以将其视为 "双指针" 方法,如果你将 p 视为一个辅助变量,而不是一个 "指针"。在这种情况下,"双指针" 是指 p1 和 p2,它们分别遍历 nums1 和 nums2。这种分类主要取决于你如何定义 "指针"。

相关推荐
爱数模的小驴1 小时前
2025 年“认证杯”数学中国数学建模网络挑战赛 C题 化工厂生产流程的预测和控制
深度学习·算法·计算机视觉
软件测试曦曦2 小时前
16:00开始面试,16:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
序属秋秋秋3 小时前
算法基础_数据结构【单链表 + 双链表 + 栈 + 队列 + 单调栈 + 单调队列】
c语言·数据结构·c++·算法
独行soc3 小时前
2025年常见渗透测试面试题-红队面试宝典下(题目+回答)
linux·运维·服务器·前端·面试·职场和发展·csrf
apcipot_rain4 小时前
【密码学——基础理论与应用】李子臣编著 第五章 序列密码 课后习题
算法·密码学
不要不开心了4 小时前
sparkcore编程算子
pytorch·分布式·算法·pygame
88号技师4 小时前
【2024年最新IEEE Trans】模糊斜率熵Fuzzy Slope entropy及5种多尺度,应用于状态识别、故障诊断!
人工智能·算法·matlab·时序分析·故障诊断·信息熵·特征提取
清同趣科研4 小时前
R绘图|6种NMDS(非度量多维分析)绘图保姆级模板——NMDS从原理到绘图,看师兄这篇教程就够了
人工智能·算法
杜小暑4 小时前
冒泡排序与回调函数——qsort
c语言·算法·排序算法
徵6864 小时前
代码训练day27贪心算法p1
算法·贪心算法