LeetCode088_88. 合并两个有序数组

news/2023/6/6 23:23:58

LeetCode088_88. 合并两个有序数组

一、描述

给你两个按 非递减顺序 排列的整数数组 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] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

提示:

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-10 9 <= nums1[i], nums2[j] <= 10 9

二、题解

方法一:新创建一个数组,将数组nums1中前m个元素和数组nums2排序完放在新数组中,然后排序,最后将新数组值重新给数组nums1。

    /*** 题意:将nums1中的前m个元素和nums2中的前n个元素合并到nums1中,并排序前m+n个元素。* 思路:新创建一个数组,将数组nums1中前m个元素和数组nums2排序完放在新数组中,然后排序,最后将新数组值重新给数组nums1。*///AC Your runtime beats 48.00 % of java submissions.//59 / 59 test cases passed.	Status: Accepted	Runtime: 6 mspublic void merge(int[] nums1, int m, int[] nums2, int n) {int[] nums3 = new int[m + n];//定义一个临时的数组for (int i = 0; i < m; i++) {nums3[i] = nums1[i];}for (int i = 0; i < n; i++) {nums3[m + i] = nums2[i];}Arrays.sort(nums3);for (int i = 0; i < nums3.length; i++) {nums1[i] = nums3[i];//重新赋值给nums1}//System.out.println(Arrays.toString(nums1));}

方法二:和上面的思路类似,但是更简洁

    //和上面的思路类似,但是更简洁public void merge2(int[] nums1, int m, int[] nums2, int n) {for (int i = 0; i < n; i++) {nums1[m + i] = nums2[i];}Arrays.sort(nums1);//System.out.println(Arrays.toString(nums1));}

方法三:双指针。这应该是本题的意义所在

    //方法三:双指针。这应该是本题的意义所在public void merge(int[] nums1, int m, int[] nums2, int n) {//定义双指针int index1 = 0;int index2 = 0;int[] sortArr = new int[m + n];int curValue;//表示在当前的排序数组中要存放的值while (index1 < m || index2 < n) {if (index1 == m) {curValue = nums2[index2++];} else if (index2 == n) {curValue = nums1[index1++];} else if (nums1[index1] < nums2[index2]) {curValue = nums1[index1++];} else {curValue = nums2[index2++];}sortArr[index1 + index2 - 1] = curValue;}for (int i = 0; i < m + n; i++) {nums1[i] = sortArr[i];}//System.out.println(Arrays.toString(nums1));}

LeetCode 1. 两数之和
LeetCode 2. 两数相加
LeetCode 3. 无重复字符的最长子串
LeetCode 4. 寻找两个正序数组的中位数
LeetCode 5. 最长回文子串
LeetCode 6. Z 字形变换
LeetCode 7. 整数反转
LeetCode 8. 字符串转换整数 (atoi)
LeetCode 9. 回文数
LeetCode 10. 正则表达式匹配
LeetCode 13. 罗马数字转整数
LeetCode 14. 最长公共前缀
LeetCode 20. 有效的括号本
LeetCode 26. 删除有序数组中的重复项
LeetCode 27. 移除元素
LeetCode 28. 找出字符串中第一个匹配项的下标
LeetCode 35. 搜索插入位置
LeetCode 53. 最大子数组和
LeetCode 66. 加一
LeetCode 67. 二进制求和
LeetCode 69. x 的平方根
LeetCode 70. 爬楼梯
LeetCode 80. 删除有序数组中的重复项 II
LeetCode 83. 删除排序链表中的重复元素
LeetCode 82. 删除排序链表中的重复元素 II
LeetCode 88. 合并两个有序数组



声明:
        题目版权为原作者所有。文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。


By luoyepiaoxue2014

B站: https://space.bilibili.com/1523287361 点击打开链接
微博: http://weibo.com/luoyepiaoxue2014 点击打开链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4567244.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能-遗传算法

这是一类智能的算法&#xff0c;没有什么固定的模式&#xff0c;就是一个算法思想&#xff0c;可以给我们一些有价值的指导&#xff0c;当我们想要做一些相关工作的时候&#xff0c;可以扩宽我们的视野&#xff0c;打开我们的脑洞&#xff0c;借鉴其中的原理。我不想多说里面的…

让你的系统“坚挺不倒”的最后一个大招——「降级」

也许你对降级已经有了一些认识&#xff0c;认真看完&#xff0c;我想这篇文章可能会给你带来一些新的收获&#xff5e; 前面两篇我们已经聊过了「熔断」&#xff08;如何在到处是“雷”的系统中「明哲保身」&#xff1f;这是第一招&#xff09;和「限流」&#xff08;想通关「限…

前端html+css+js面试题

HTML&CSS&#xff1a;对Web标准的理解&#xff08;结构、表现、行为&#xff09;、浏览器内核、渲染原理、依赖管理、兼容性、CSS语法、层次关系&#xff0c;常用属性、布局、选择器、权重、盒模型、Hack、CSS预处理器、CSS3、Flexbox、CSS Modules、Document flow、BFC、H…

最佳(中高级)前端面试题

前言 “我前几天在旧金山参加了Free Code Camp 的见面会&#xff08;meetup &#xff09;&#xff0c;&#xff08;给不熟悉的同学们介绍一下&#xff0c;Free Code Camp是一个供人们聚在一起学习JavaScript一类的web开发的组织&#xff09;&#xff0c;有几位朋友正在应聘前端…

集合各大牛博客的web前端面试题

最近面试的公司有点多&#xff0c;这些题是我在看面试题的时候感觉比较全面的大牛GitHub上写的。特此来引用&#xff0c;希望可以帮助各位。 前端开发所需掌握知识点概要&#xff1a; HTML&CSS&#xff1a;对Web标准的理解&#xff08;结构、表现、行为&#xff09;、浏览器…

常见RAID定义

RAID RAID是“ Redundant Array of Independent Disk ”的缩写&#xff0c;中文意思是独立冗余磁盘阵列。 RAID等级 RAID0 RAID1 RAID3 RAID5 RAID10 RAID50 别名 条带 镜像 专用奇偶位条带 分布奇偶位条带 镜像阵列条带 容错性 无 有 有 有 有 有 冗余…

IBM X3650 M3服务器上RAID配置实战

背景知识&#xff1a;RAID就是一种由多块廉价磁盘构成的冗余阵列&#xff0c;在操作系统下是作为一个独立的大型存储设备出现的。RAID可以充分发挥出多块硬盘的优势&#xff0c;可以提升硬盘速度&#xff0c;增大容量&#xff0c;提供容错功能确保数据安全性&#xff0c;在任何…

RAID0、1、3、5、6、10、50和热备盘超详细说明

RAID目录传统RAID技术RAID概念说明热备盘说明RAID0 说明RAID1说明RAID3 说明RAID5 说明RAID 6 说明RAID 6 PQ说明RAID 6 DP说明混合RAID 10 说明混合RAID 50 说明传统RAID技术 RAID概念说明 RAID技术出现的初衷是把多个小容量的硬盘组合起来&#xff0c;以获得更大的存储容量。…