LeetCode刷题-6
数组-88. 合并两个有序数组
- 题目描述
- 题目样例
- Java方法:直接合并后排序
- 思路及算法
- 代码
- 执行结果
- 复杂度
- Java方法:双指针
- 思路及算法
- 代码
- 执行结果
- 复杂度
- Java方法:逆向双指针
- 思路及算法
- 代码
- 执行结果
- 复杂度
题目描述
给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。
题目样例
- 示例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
Java方法:直接合并后排序
思路及算法
最直观的方法是先将数组 nums2 放进数组 nums1 的尾部,然后直接对整个数组进行排序。
代码
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {for (int i = 0; i != n; ++i) {nums1[m + i] = nums2[i];}Arrays.sort(nums1);}
}
执行结果
- 执行结果:通过
- 执行用时:1 ms, 在所有 Java 提交中击败了17.63%的用户
- 内存消耗:38.3 MB, 在所有 Java 提交中击败了81.72%的用户
复杂度
- 时间复杂度:O((m+n)log(m+n))
- 空间复杂度:O(log(m+n))
Java方法:双指针
思路及算法
可以使用双指针方法。这一方法将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中。为两个数组分别设置一个指针 p1与 p2来作为队列的头部指针。
代码
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = 0, p2 = 0;int[] sorted = new int[m + n];int cur;while (p1 < m || p2 < n) {if (p1 == m) {cur = nums2[p2++];} else if (p2 == n) {cur = nums1[p1++];} else if (nums1[p1] < nums2[p2]) {cur = nums1[p1++];} else {cur = nums2[p2++];}sorted[p1 + p2 - 1] = cur;}for (int i = 0; i != m + n; ++i) {nums1[i] = sorted[i];}}
}
执行结果
- 执行结果:通过
- 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
- 内存消耗:38.5 MB, 在所有 Java 提交中击败了58.52%的用户
复杂度
- 时间复杂度:O(m+n)
- 空间复杂度:O(m+n)
Java方法:逆向双指针
思路及算法
nums1 的后半部分是空的,可以直接覆盖而不会影响结果。因此可以指针设置为从后向前遍历,每次取两者之中的较大者放进 nums1 的最后面。严格来说,在此遍历过程中的任意一个时刻,nums1数组中有 m−p1−1 个元素被放入 nums1的后半部,nums2数组中有 n−p2−1 个元素被放入 nums1的后半部,而在指针 p1的后面,nums1数组有 m+n−p1−1 个位置。由于m+n−p1
−1≥m−p1−1+n−p2−1,等价于p2 ≥−1永远成立,因此 p1后面的位置永远足够容纳被插入的元素,不会产生 p1的元素被覆盖的情况。
代码
class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 = m - 1, p2 = n - 1;int tail = m + n - 1;int cur;while (p1 >= 0 || p2 >= 0) {if (p1 == -1) {cur = nums2[p2--];} else if (p2 == -1) {cur = nums1[p1--];} else if (nums1[p1] > nums2[p2]) {cur = nums1[p1--];} else {cur = nums2[p2--];}nums1[tail--] = cur;}}
}
执行结果
- 执行结果:通过
- 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
- 内存消耗:38.6 MB, 在所有 Java 提交中击败了31.81%的用户
复杂度
- 时间复杂度:O(m+n)
- 空间复杂度:O(1)
相关文章:

Bootstrap 模态框上下居中
在bootstrap.js里面找到Modal.prototype.adjustDialog在里面添加: // 是弹出框居中。。。var $modal_dialog $(this.$element[0]).find(.modal-dialog);var m_top ($(window).height() - $modal_dialog.height()) / 2;$modal_dialog.css({ margin: m_top px auto…

Oracle自增列创建方法
最近在做Oracle的项目,由于以前没有接触过Oracle的开发,遇到了不少的问题,比如给Oracle表添加自增列,与SQL Server就不同。Oracle没有自增字段这样的功能,但是通过触发器(trigger)和序列(sequence)可以实现。 先建一个…

LeetCode刷题-7
数组-108. 将有序数组转换为二叉搜索树题目描述题目样例前言Java方法:中序遍历,总是选择中间位置左边的数字作为根节点思路及算法代码复杂度Java方法:中序遍历,总是选择中间位置右边的数字作为根节点思路及算法代码复杂度Java方法…

PS 拉伸大长腿
1.打开一个图片工具栏--图像--画布大小 2.选择矩形选框工具--框住要拉升退的位置--然后在按CtrlT,进行拉伸即可 转载于:https://www.cnblogs.com/dengqing9393/p/9481647.html

LeetCode刷题-8
数组-118. 杨辉三角题目描述题目样例Java方法:数学思路及算法代码复杂度题目描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 题目样例 示例1: 输入…

php导出excel格式数据
解决2个问题: 1.身份证之类的文本数据自动转为科学计数法的问题。 2.中文乱码的问题 excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取 它,所以把mime类型设…

[BZOJ2796][Poi2012]Fibonacci Representation
由于是斐波那契数列,所以$x_ix_j<x_k,i<j<k$ 所以猜测可以贪心选择两边近的数处理。 1 #include<cstdio>2 #include<algorithm>3 #define ll long long4 #define mid (lr>>1)5 using namespace std;6 ll f[505],tot1;7 inline ll findl(…

AppStore审核2.1被拒大礼包过审经历
本团队的iOS端迭代至今,经历过AppStore审核的数次调整,包括审核时长、严厉程度等,尝过各种花式的拒绝理由,但从没有像2018年初这次来得猛烈和漫长。从首次提交到最后过审几乎花费一个月的时间,下面的文字记录了整个过程…

oracle 小数点前零丢失的问题
1.问题起源 oracle 数据库字段值为小于1的小数时,使用char类型处理,会丢失小数点前面的0 例如0.35就变成了.352.解决办法:用to_char函数格式化数字显示 select to_char(0.338,fm9999999990.00) from dual; 结果:0.34 这里重点…

SQLServer查看存储过程的方法
使用 sp_helptext 查看存储过程的定义 在对象资源管理器中,连接到 数据库引擎实例,再展开该实例。在工具栏上,单击“新建查询”。在查询窗口中,输入下列语句。更改数据库名称和存储过程名称以引用所需的数据库和存储过程。USE yca…

数据文件u11
数组-136. 只出现一次的数字题目描述题目样例Java方法:位运算算法思路代码复杂度题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 题目样例 示例1: 输入: […

centos7安装配置pgAgent
centos7安装pgagent:默认cmake已经安装编译wxGTKhttps://excellmedia.dl.sourceforge.net/project/wxwindows/2.8.7/wxGTK-2.8.7.tar.gz# yum install gcc gcc-c# tar -zxf wxGTK-2.8.7.tar.gz# cd wxGTK-2.8.7[wxGTK-2.8.7]# vi /etc/profileexport PGHOME/usr/loc…

Oracle-ORA-01722 invalid number错误
本来正常的,经过抓包才知道原来是数字型的无意中多了乱码! 本来是3276的居然多了后面一串 3276PuAnrSeU2zliUIV/FHlnX2Xgia1au2xX2vMWtwhttp://www.cnblogs.com/raymond19840709/archive/2008/05/16/1200826.html 1. 代码里面执行了如下SQL语句ÿ…

只读方式VS地址
数组-136. 只出现一次的数字题目描述题目样例Java方法:位运算算法思路代码复杂度题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 题目样例 示例1: 输入: […

Nmap (网络映射器)好东西啊
2019独角兽企业重金招聘Python工程师标准>>> Nmap (网络映射器)是由 Gordon Lyon设计,用来探测计算机网络上的主机和服务的一种安全扫描器。为了绘制网络拓扑图,Nmap的发送特制的数据包到目标主机,然后对返…

【教你赚钱】独立开发者荒野求生之道
本文包括以下内容: 独立开发者面临的现状如何利用一切细节,获取流量注:本文将不涉及代码层面的东西,但是将有可能帮助你,把你写完的代码的价值,放大十倍百倍千倍。 我做了四年独立开发,从一开始…

form表单的reset
form表单的reset重置表单(把表单的所有输入元素重置为它们的默认值。):1.使用reset按钮,条件reset按钮必须在form表单内部。2. <input id"Button1" type"button" value"button" οnclick"form1.reset();" />可以不在…

导航属性(外键)
第一种方法:(不灵活)1.一个学生类型只能保存一个年级对象//一个年级对象能保存多个学生对象//实际开发时单向比较多5.在年级对象类中根据年级编号来查询年级对象//写在if前面代表察回来值即使是空也没问题 因为null6.创建学生编号的时候new 一个 年级对象并且调用年级对象的id将…

23.week4
调通了 剩下的就是核心的部分 转载于:https://www.cnblogs.com/PoeticalJustice/p/9494823.html

“重置”不是“清空”
编程这么多年,一直以为“重置”按钮就是“清空”。 其实,重置是让页面回到初始状态,关键就是如果某个文本框中有值,那么点重置是不能清空的。可以自己做个测试,在一开始就有值的文本框后添加信息,点重置只会…

洒出VS的受调查
数组-136. 只出现一次的数字题目描述题目样例Java方法:位运算算法思路代码复杂度题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 题目样例 示例1: 输入: […

SQL 常用方法
SQL 常用方法 EXCEPT :返回两个结果集的差(即从左查询中返回右查询没有找到的所有非重复值)。 INTERSECT :返回 两个结果集的交集(即两个查询都返回的所有非重复值)。 UNION :返回两个结果集的并…

【转】Visual Studio团队资源管理器 Git 源码管理工具简单入门
1.1 环境 Visual Studio GitLab (其他版本同理) 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(FetchMeger) 获取(Fetch):从远…

php字符串比较函数
比较两个字符串是否相等,最常见的方法就是使用“”来判断,至于它和“”的区别,简单来说就是前者强调“identical”类型也要求一样;后者要求“equal”,值相同就可以了,参考【1】。或者使用strcmp来判断&…

Debugging Tools for Windows__from WDK7
1、 主要要用到两个工具: (1)、WinDBG 这个主要用于 非IDE下 调试程序/查看信息等 (2)、cdb.exe 这个主要是用在 Qt5.3.2 for VS10 的单步调试器 2、 WDK7 的文件,名为 GRMWDK_EN_7600_1.ISO,该文件我备份于“百度云 CodeSkill --> 全部文…

数据结构:二分查找 java
为什么80%的码农都做不了架构师?>>> 二分查找的前提是有序存储,利用顺序存储和元素排序 /*** 二分查找,查找成功,返回下标记* param values* param begin* param end* param key* param <T>* return*/ public s…

PHP一些十分严重的缺陷
1. 对递归的不良支持 递归是一种函数调用自身的机制。这是一种强大的特性可以把某些复杂的东西变得很简单。有一个使用递归的例子是快速排序(quicksort)。不幸的是,PHP并不擅长递归。Zeev,一个PHP开发人员,说道:“PHP 4.0(Zend)对…

Thinkphp----------为什么Thinkphp会默认进入Index控制器的index方法
1、最近遇到两个刚学PHP的童鞋,都问到了同一个问题,就是他们没有做什么配置,为什么访问入口文件index.php的时候会自动跳转到IndexController里面的index方法。他们想知道具体怎么回事,下面就简单讲解一下,其实并不难只…

Confluence 6 Home 和其他重要的目录
2019独角兽企业重金招聘Python工程师标准>>> Confluence 安装目录 Confluence 安装的目录(Confluence Installation directory)定义的是 Confluence 是在那里进行安装的。这个目录有时候也被称为 Confluence 安装目录(Confluence …

Apache,Nginx,Lighttpd分别使用X-sendfile功能提升文件下载性能
关于mod_xsendfile https://tn123.org/mod_xsendfile/Lighttpd中的X-sendfile RoR网站如何利用lighttpd的X-sendfile功能提升文件下载性能 使用X-sendfile方式,服务器端应用程序不需要读取下载文件了,只需要设置response的header信息就足够了,…