每日一道 LeetCode (19):合并两个有序数组

每天 3 分钟,走上算法的逆袭之路。
前文合集
代码仓库
GitHub: https://github.com/meteor1993/LeetCode
Gitee: https://gitee.com/inwsy/LeetCode
题目:合并两个有序数组
题目来源:https://leetcode-cn.com/problems/merge-sorted-array/
给你两个有序整数数组 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]
解题方案
这道题单纯的从排序上来讲并不是难题,毕竟题目中已经给出来两个有序的数组了,最简单的循环一下长数组,然后挨个比较下两个数组元素的大小,放到一个新数组里面就完事儿了。
这道题的难点在于,我们需要在 nums1 数组中,完成两个数组的排序,这个就稍微有点坑了,这相当于要把 nums2 合并到 nums1 当中,还得要有序的合并进去。
这个弯有点难绕的,题目中虽然说最终的结果要在 nums1 当中,但是并没有说不允许我们创建第三个数组啊,我可以创建一个新的数组,把 nums1 copy 到新的数组中,然后再在 nums1 当中完成排序,这不也行么。
接下来就是代码时间,很简单,定义了两个指针,一个是 copy_nums1 的指针,还有一个是 nums2 的指针,通过移动这两个指针,来完成整个排序工作。
// 从前往后
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] copy_nums1 = new int[m];
System.arraycopy(nums1, 0, copy_nums1, 0, m);
// copy_nums1 的指针
int n1 = 0;
// nums2 的指针
int n2 = 0;
// nums1 的指针
int n0 = 0;
while ((n1 < m) && (n2 < n)) {
nums1[n0++] = copy_nums1[n1] < nums2[n2] ? copy_nums1[n1++] : nums2[n2++];
}
if (n1 < m) {
System.arraycopy(copy_nums1, n1, nums1, n1 + n2, m + n - n1 - n2);
}
if (n2 < n) {
System.arraycopy(nums2, n2, nums1, n1 + n2, m + n - n1 - n2);
}
}

上面这种方案虽说能解决问题,但是有一点不大好,就是新建了一个数组,多占用了一个数组的空间,既然题上说 nums1 的长度足够上,我们从小到大排序不好排,那么如果是从大到小呢?
思路基本上还是一个思路,定义两个指针,然后倒序的将元素装到 nums1 里面。
// 从后往前
public void merge_1(int[] nums1, int m, int[] nums2, int n) {
// nums1 有数据的尾部指针
int n1 = m - 1;
// nums2 的尾部指针
int n2 = n - 1;
// nums1 最终的尾部指针
int n0 = m + n - 1;
while ((n1 >= 0) && (n2 >= 0)) {
nums1[n0--] = nums1[n1] < nums2[n2] ? nums2[n2--] : nums1[n1--];
}
System.arraycopy(nums2, 0, nums1, 0, n2 + 1);
}

今天这两道题都不难,基本上搞清楚了方案以后,就是写写代码练练手。
每日一道 LeetCode (19):合并两个有序数组的更多相关文章
- [LeetCode每日一题]88. 合并两个有序数组
[LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...
- Leetcode 88 合并两个有序数组 Python
合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分 ...
- Java实现 LeetCode 88 合并两个有序数组
88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元 ...
- LeetCode 88. 合并两个有序数组
题目: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- 领扣(LeetCode)合并两个有序数组 个人题解
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...
- LeetCode 88. 合并两个有序数组(Merge Sorted Array)
题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...
- 【LeetCode】合并两个有序数组
[问题] 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...
- leetcode 88. C++ 合并两个有序数组
Leetcode 88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 ...
- 【python】【补】Leetcode每日一题-合并两个有序数组
[python]Leetcode每日一题-合并两个有序数组 [题目描述] 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 ...
随机推荐
- 一些matlb会用到的函数
matlab这种软件功能很强大,但是都不是常常会用到,尤其是像在学生中.每次用的时候总会把一些基本的函数忘记,还的去网上查.我之前在使用的时候也总结过,可惜在一次数据丢失中全没了(︶︹︺). 从现在开 ...
- 常用CSS颜色表
1.16进制的CSS颜色代码 > http://www.jsjtt.com/webkaifa/HTML/65.html
- java实现单链表的增删改以及排序
使用java代码模拟单链表的增删改以及排序功能 代码如下: package com.seizedays.linked_list; public class SingleLinkedListDemo { ...
- Flutter.. 两个点语法含义
在Flutter编程中,会经常用到".."的语法糖,如下 state.clone() ..splashImg = action.img ..famousSentence = act ...
- Nginx(一)Linux上的Nginx安装步骤
一.Windows下安装 解压:nginx-windows 双击: nginx.exe 能看到nginx欢迎界面说明,nginx安装成功 演示下 nginx做静态服务器 二.Linux下安装 (1). ...
- Python程序设计(第3版)PDF高清完整版免费下载|百度网盘
百度网盘:Python程序设计(第3版)PDF高清完整版免费下载 提取码:48u4 内容简介 本书是面向大学计算机科学专业第一门程的教材.本书以Python语言为工具,采用相当传统的方法,强调解决问题 ...
- xctf-web supersqli
单引号注入,用order by查到了两个column.用union select的时候发现select关键字被过滤了 用分号尝试堆叠注入显示出了两张表 分别查询字段 flag在表19198109311 ...
- IDEA中搭建项目环境
ladies and gentlemen,Welcome to my blog! 本文主要在IDEA中搭建项目环境. 有问题和指正,欢迎下方留言~ 1. 使用GitLab将项目下载下来 1.1 选 ...
- 数据结构C语言实现----树
树的基本知识点 树的定义 树的ADT(抽象数据类型) 树的储存结构 二叉树的定义 二叉树的储存结构 遍历二叉树 二叉树的建立 二叉树的ADT typedef struct BiTNode { Elem ...
- plantuml 基本语法(转摘)
<div id="topics"> <div class="post"> <h1 class="postTitle&qu ...