跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode88合并两个有序数组
2020-08-03 16:15
801 查看
题目:
88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 说明: 初始化 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]
最朴素的解法就是将两个数组合并之后再排序。该算法只需要一行(Java是2行),时间复杂度较差,为O((n+m)log(n+m))O((n + m)\log(n + m))O((n+m)log(n+m))。这是由于这种方法没有利用两个数组本身已经有序这一点。LeetCode
一般而言,对于有序数组可以通过 双指针法 达到O(n+m))O(n + m))O(n+m))的时间复杂度。
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. """ p1 = m-1 p2 = n-1 p = m+n-1 while p1 >=0 or p2>=0: if p2<0 or (p1>=0 and nums1[p1] > nums2[p2]): nums1[p]OK。= nums1[p1] p -= 1 p1 -= 1 else: nums1[p] = nums2[p2] p -= 1 p2 -= 1 return nums1
相关文章推荐
- leetcode之数组类之数组的旋转与分治类-----OJ 189/33/81/153/154 数组旋转 旋转数组搜索 88 有序数组合并 4 两个有序数组寻找第K个元素/中位数 35 寻找插入位置
- 【LeetCode】88 合并两个有序数组
- leetcode:Merge Sorted Array(合并两个有序数组到其中一个数组中)【面试算法题】
- Leetcode 88 Merge Sorted Array 合并两个有序数组
- LeetCode-88合并两个有序数组
- leetcode刷题88 合并两个有序数组
- Leetcode刷题27-88.合并两个有序数组(C++)
- 【leetcode系列】88.合并两个有序数组
- LeetCode 88 合并两个有序数组 Java 从头/尾开始的双指针、C++库函数
- Leetcode 刷题之路 之 算法思想 一、双指针 : 5) 88. 合并两个有序数组
- 数据结构与算法[LeetCode]—两个有序数组合并及找中点问题
- 【88.合并两个有序数组】 LeetCode
- LeetCode每日一题--合并两个有序数组
- LeetCode刷题笔记(Java版)----88、合并两个有序的数组
- leetcode-88:合并两个有序数组
- Python LeetCode(88.合并两个有序数组)
- leetcode刷题:88 合并两个有序数组
- leetcode 刷题记录(高频算法面试题汇总)--合并两个有序数组
- Java 数组(算法88):合并两个有序数组
- 【Leetcode】88.合并两个有序数组