LeetCode 88 合并了两个有序数组

小夏 科技 更新 2024-01-29

给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使 num1 成为有序数组。

说明:初始化 nums1 和 nums2 的元素个数分别为 m 和 n。

您可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来容纳 nums2 中的元素。

示例: 输入:

nums1 = [1,2,3,0,0,0], m = 3

nums2 = [2,5,6], n = 3

输出:[1,2,2,3,5,6]。

阿里 腾讯 字节 Loomberg Facebook Microsoft 合并 排序 直观的方法将 nums2 插入到 num1 的末尾并排序

特定**:

这个解决方案甚至没有使用 m,这显然不是提问者的意思:if (n === 0) return; let current2 = 0;for (let i = nums1.length - 1; i >= nums1.length - n; i--)nums1.sort((a, b) => a - b);当然,你可以自己写排序,我懒得在这里写,因为它已经偏离了主题本身
这个问题其实和基本排序算法是一样的merge sort非常喜欢。

我们先来回顾一下合并排序的合并过程。 合并过程是的首先比较这两个数组Header 元素,然后将较小的一个推入最终数组,并将其从原始数组中删除。 继续循环,直到两个数组都为空。

具体如下:

使用函数 merge(nums1, nums2) 合并 nums1 和 nums2 if (j === nums2.)。length) const a = nums1[i]; const b = nums2[j]; if (a > b) else }return ret;}
但是合并排序很多时候,在合并的时候,我们通常会创建一个新的数组,但是这个问题需要原位修改.这与合并排序的合并过程略有不同。 这需要原位修改。 如果使用上述方法,则从头开始使用nums1 的前 m 个数组需要放在另一个数组中,以避免写指针写字的干扰。则对空间复杂度进行$o(m)$。 事实上,我们可以从从后到前比较,从后到前插入。 我们需要三点:

写指针电流,用于记录当前填充到该位置,m 用于记录 nums1 数组被处理到哪个元素,n 用于记录 nums2 数组被处理到哪个元素,如图所示:

灰色表示已在 num2 数组中处理的元素,红色表示当前正在比较的元素,绿色表示已到位的元素

从后到前比较,从后到前插入,以避免写入指针的影响,同时将空间复杂度降低到 $o(1)$

*支持:Python3,C++,J**A,J**Ascript

j**ascript code:

var merge = function (nums1, m, nums2, n) if (n < 1) 在 nums1 末尾取大填充并更新 m 或 n if (nums1[m - 1] >nums2[n - 1]) else }
c++ code:

class solution if (n < 1) if (nums1[m - 1] >nums2[n - 1]) nums1[current--]= nums1[--m]; else nums1[current--]= nums2[--n];
j**a code:

类解决方案 else } 合并剩余的 nums2 while(j>=0)。
python code:

class solution: def merge(self, nums1: list[int], m: int, nums2: list[int], n: int) -none: """ do not return anything, modify nums1 in-place instead. """ pos = m + n - 1 while m > 0 and n > 0: if nums1[m - 1] 0: nums1[pos] = nums2[n - 1] n -= 1 pos -= 1
复杂性分析时间复杂度:$o(m + n)$Space复杂度:$o(1)$

相似文章

    为什么玄玄有两位皇后?女王之谜,权力游戏中的策略和选择

    玄玄之所以有两位皇后,就是因为他要稳定局势,赢得中原和昊陵人民的心。以至于玄玄的第一任皇后是 心月 第二任皇后是 阿年 试想一下,玄玄无法平衡自己家族的势力和皓陵的支持,所以他娶了两位皇后。你可能会问,为什么一个国王需要娶两个王后?这背后隐藏着复杂的政治 军事和民生现实。请和我一起揭开这段历史的真相...

    两个有家庭的人相爱,做这3个字真的很聪明

    在这个瞬息万变的社会中,如果两个有家庭的人相爱,又该如何应对感情的诸多考验?这似乎已经成为一场不可避免的道德游戏。然而,当爱与责任相遇,当两颗心在婚姻的保护下产生共鸣时,他们真的会聪明到找到人生的最佳坐标吗?让我们揭开这个难以言喻的心灵密码。从表面上看,两个有家庭的人相爱似乎是一种道德上的缺陷,但我...

    男人的世界里总会有两个女人,第二个是真爱

    许多男人在与某人牵手一辈子后,往往会感到无聊和疲惫,对周围的人失去感情。而那个不在一起,曾经暖心的人,却成了他们心中永远的朱砂痣,让人难以忘怀。张先生就是其中之一。他与妻子结婚二十年,从青年到中年,从激情到平淡如水,一切似乎都是那么自然。但张先生心里清楚,自己对妻子的情怀早已转化为亲情,当初的心跳,...

    女人在打算离婚的时候,应该把这两个问题想清楚

    该女子有离婚计划。女人在离婚前一定要把这两件事想清楚,否则下一段婚姻会更加痛苦。客户总是问我,老师,我应该和他离婚吗?我一听到这个问题,就问他们两个问题。首先,你有实力支付离婚费用吗?离婚不是一件容易的事,如果婚姻中衣食住行的基本需求都由伴侣满足,而你却没有收入 那么离婚后,你要么啃老,要么喝西北风...

    这两个字是曹操写的,但为什么会有错别字呢?只是因为我们不了解曹操

    公元年,随着荀昱加入曹操的队伍,弥补了曹操最短的缺点,曹操摆脱了人生第一阶段失败的厄运,开始了人生的第二阶段。这是曹操最辉煌的时期,五次败袁术,胁迫天子下令诸侯,俘虏并杀死吕布,灭掉袁书,刘备清梅煮酒谈英雄,招收关羽.在公元年的官渡之战中,最强大的元绍集团.一举被击败不到年时间,曹操几乎称霸了北方!...