首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

合并两个有序数组

题目: 图片 思路: 解法有两种: 1,顺序排序,需要额外创建一个数组大小为m+n,然后比较A与B,遍历填充进新数组。...然后把数组再次填充回A里面,所以次数为2*(m+n),当m+n趋于无穷大时,2就被忽略了,时间复杂度为O(m+n),空间复杂度为O(m+n) 2,对于第一种方法如果要优化点可以从空间开始,因为题目本身就是给予了...A足够大空间,其次是多次额外赋值对于操作来说也是浪费,所以可以考虑倒序排序思路。...因为从前面开始排,你比对完后占了位置,其他数就要往后面移动,这样操作太大     * 而且从前文可知A大小足够容纳两个数组数,所以从后面按大到小进行排序,这样不会造成其他数因为某个数而需要往后靠操作...    * 同理需要注意是下面缺少了对a继续遍历,因为A数组本身就是有序,所以如果第一个循环中把a遍历到了最小值,此时要把b继续遍历完     * 而如果b遍历完了,那么a大可不必遍历,因为本身有序

1.5K40
您找到你想要的搜索结果了吗?
是的
没有找到

合并两个有序数组

题目 有两个排序整数数组,分别是数组1和数组2,将数组2合并数组1中,合并以后数组1,仍是有序数组。...提示: 数组1有m个元素,数组2有n个元素 可以假设数组1有足够空间(大于m+n)去容纳从数组2得到额外元素。 具体化问题,写出两个有序数组以后,分析问题得出思路。以所给例子作为参考。...一般这种合并有序序列,思路应该都是从后向前合并。 思路3: 提示中已经给出,假设array1有足够空间了,于是我们不需要额外构造一个数组,并且可以从后面不断地比较元素进行合并。...k:新数组下标 int i=0,j=0,k=0; // 按位循环比较两个数组,较小元素放入新数组,下标加一(注意,较大元素对应下标不加一...result[k++] = b[j++]; } /* 后面连个while循环是用来保证两个数组比较完之后剩下一个数组元素能顺利传入

1.1K30

合并两个有序数组

题目 难度级别:简单 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。...说明: 初始化 nums1 和 nums2 元素数量分别为 m 和 n 。 你可以假设 nums1 有足够空间(空间大小大于或等于 m + n)来保存 nums2 中元素。...-10^9 <= nums1[i], nums2[i] <= 10^9 nums1.length == m + n nums2.length == n 解题思路 这道题通过双指针,倒叙遍历数组进行解决...len1是nums1当前指针,len2时nums2当前指针。这里需要注意边界情况就是,当len1<0后,但len还存在情况。...这时候遍历完len2是大于0,且len也是大于0,我们在重组数组时,应该把nums1上前面多余0去掉,在把nums2剩余元素放到nums1前面去。

86120

88 合并两个有序数组

题目信息 题目地址:https://leetcode-cn.com/problems/merge-sorted-array/ 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到...,与上次我们在链表时写过合并有序链表同样通过扫描与大小比较最终扫描完两个序列(m+n),前者是新建一个头节点然后遍历过程中慢慢连。...看下题目可知实际元素数量是m,n完整数组是可能有多余空间,并且num1空闲可以容纳nums2有效元素,就是说我们直接把nums1作为结果数组,新建数组装num1实际元素 有了思路之后理一下具体过程...nums1_copy[i] = nums[i]; } */ System.arraycopy(nums1, 0, nums1_copy, 0, m); // 扫描两个素材数组指针...并且可能一直是num2小也是说那边还是需要一个中间数组。 也就是为了那一块值创建了m大小数组,为什么我们能拿num1为结果数组?不就是它有空闲一块地方么,那么我们何必不用呢!反而另开一块呢!

86640

LeetCode | 合并两个有序数组

合并两个有序数组 - 力扣(LeetCode) 给你两个按 非递减顺序 排列整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中元素数目。...请你 合并 nums2 到 nums1 中,使合并数组同样按 非递减顺序 排列。 注意:最终,合并数组不应由函数返回,而是存储在数组 nums1 中。...为了应对这种情况,nums1 初始长度为 m + n,其中前 m 个元素表示应合并元素,后 n 个元素为 0 ,应忽略。nums2 长度为 n 。...合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注为 nums1 中元素。...示例 3: 输入:nums1 = [0], m = 0, nums2 = [1], n = 1 输出:[1] 解释:需要合并数组是 [] 和 [1] 。 合并结果是 [1] 。

74640

leetcode:合并两个有序数组

合并两个有序数组 1、题目描述 2、解决方案 3、代码实现 1、题目描述   给你两个按 非递减顺序 排列整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2...请你 合并 nums2 到 nums1 中,使合并数组同样按 非递减顺序 排列。 注意:最终,合并数组不应由函数返回,而是存储在数组 nums1 中。...示例 3: 输入:nums1 = [0], m = 0, nums2 = [1], n = 1 输出:[1] 解释:需要合并数组是 [] 和 [1] 。 合并结果是 [1] 。...数组已经排好序了,那我们就每次从两个数组头部取出两个数字,然后比较,将数值较小那个加入到结果中就行,然后谁被加入到结果中,那么那个数组工作指针后移,没加入不动就行。   ...当其中一个数组时候(两个数组长度可能不一致),把剩下那个数组直接全部加入到结果数组中即可。

1.8K30

两个有序数组合并,python版

看到其他部门笔试题,发现有这个题目:两个有序数组合并,于是尝试着用python写出来 关键: 1、两个数组已经排序好,所以内部无需比较,比较都是存在于两个数组之间 2、比较结束后,需要将其中一个数组剩余序列添加到最终数组...if __name__ == '__main__':     a=[2,4,6,8,9,10]     b=[0,1,3,6,7,9,100,134]     counta=countb=0#分别记录两个数组遍历到哪个位置了...            if(b[j]<=a[i]):                 c.append(b[j])                 countb=countb+1#append了b[j],那么b数组遍历记录应该自增...            else:                 c.append(a[i])                 counta=counta+1#append了a[i],那么a数组遍历记录应该自增...因为到此位置,说明b数组不能继续往下遍历了,该遍历a了     #现在就需要吧两个数组中剩余元素依次append到c中即可     if (counta<len(a)):         for i

79510

合并两个有序数组

题目: 给你两个按 非递减顺序 排列整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中元素数目。...请你 合并 nums2 到 nums1 中,使合并数组同样按 非递减顺序 排列。 注意:最终,合并数组不应由函数返回,而是存储在数组 nums1 中。...为了应对这种情况,nums1 初始长度为 m + n,其中前 m 个元素表示应合并元素,后 n 个元素为 0 ,应忽略。nums2 长度为 n 。...示例 1: 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 解释:需要合并 [1,2,3] 和 [...合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注为 nums1 中元素。 思路:直接往数组一种后面添加数组数据,然后排序即可。

58410
领券