Leetcode 88:合并两个有序数组(最详细解决方案!!!)
发布日期:2021-06-29 16:00:46
浏览次数:2
分类:技术文章
本文共 2276 字,大约阅读时间需要 7 分钟。
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中*,*使得 num1 成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
- 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]
解题思路
这个问题没什么好说的,就是考察归并排序中的merge
操作。
class Solution: def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type nums2: List[int] :type n: int :rtype: void Do not return anything, modify nums1 in-place instead. """ nums1[m:] = nums2[:n] all_list = nums1.copy() all_len = m + n i = 0 j = m for k in range(all_len): if i > m - 1: nums1[k] = all_list[j] j += 1 elif j > all_len - 1: nums1[k] = all_list[i] i += 1 elif all_list[i] < all_list[j]: nums1[k] = all_list[i] i += 1 else: nums1[k] = all_list[j] j += 1
注意这里有一个陷阱,我们必须使用all_list = nums1.copy()
,使用all_list = nums1
是不行的。这是因为后者表达的意思是all_list和nums1指向的是同一片内存空间,如果nums1
变化的话,all_list
也会随之改变。
但是我们一直忽略了题目中的条件两个有序整数数组
,所以我们有一个更好的解法。我们可以直接比较nums1和nums2
元素的大小,然后根据大小加入到nums1
的末尾,最后还要考虑nums2
的元素是否还有剩余即可。
class Solution: def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type nums2: List[int] :type n: int :rtype: void Do not return anything, modify nums1 in-place instead. """ pos = m + n - 1 m -= 1 n -= 1 while m >= 0 and n >= 0: if nums1[m] > nums2[n]: nums1[pos] = nums1[m] pos -= 1 m -= 1 else: nums1[pos] = nums2[n] pos -= 1 n -= 1 while n >= 0: nums1[pos] = nums2[n] pos -= 1 n -= 1
python
的sort
是,也就是归并排序的优化版本,所以最简洁的写法就是:
class Solution: def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type nums2: List[int] :type n: int :rtype: void Do not return anything, modify nums1 in-place instead. """ nums1[m:] = nums2[:n] nums1.sort()
该问题的其他语言版本添加到了我的
如有问题,希望大家指出!!!
转载地址:https://coordinate.blog.csdn.net/article/details/80500807 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月10日 22时39分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
架构师知识体系全景图
2019-04-29
guava中EventBus(事件总线)源码分析与使用
2019-04-29
最全架构设计实践方法论: 微服务
2019-04-29
linux入门--磁盘管理之分区、格式化与挂载
2019-04-29
开发必备:HTTP 及 TLS
2019-04-29
如何设计自己的第一个加密交易机器人?
2019-04-29
在后台的python:众多程序员无法攻克的难题
2019-04-29
国会大厦骚乱,与一家极不可靠的面部识别公司……
2019-04-29
电动汽车的“专属危险”:网络威胁问题不容小觑
2019-04-29
统治50年:为什么SQL在如今仍然很重要?
2019-04-29
复工之后:员工如何改善网络安全?
2019-04-29
2020-10-27
2019-04-29
2021-03-29
2019-04-29
网络攻击与防御--网络协议漏洞
2019-04-29
EasyDSS平台接入设备量过多的情况下如何进行批量推流测试?
2019-04-29
Mariadb基础管理
2019-04-29
linux系统时区修改(Debian的主机和docker)
2019-04-29
docker-compose 安装
2019-04-29
crontab 定时任务
2019-04-29
查看docker veth pair与宿主机上网卡的对应关系
2019-04-29