合并两个有序数组(双/三指针)
今天写作业,合并两个有序数组a和b,时间复杂度要求O(n),空间复杂度要求O(1)。
很快想到创建第三个数组c,用双指针初始化指向a和b的头元素,每次选择较大者在c上尾插进去之后,再后移相对应a或者b上的指针。
public static int[] merge(int[] a, int[] b) {int[] ans = new int[a.length + b.length];int i = 0, j = 0, n = 0;while (i < a.length && j < b.length) {if (a[i] <= b[j]) {ans[n++] = a[i++];}if (a[i] > b[j]) {ans[n++] = b[j++];}while (i < a.length) {ans[n++] = a[i++];}while (j < b.length) {ans[n++] = b[j++];}}return ans;
}
其实有另外一种解法,可以在原数组上操作:
- 首先将a扩容,新容量为a的长度加b的长度;
- 再把a原数组中的元素、b中的元素,有规律地从扩容后a数组尾部放进去;
- 放的过程:三个指针,两个分别指在扩容前后a的尾部(扩容前:p1,扩容后:p),另一个指在b的尾部(p2),然后p1、p2两者取大放入p,每次前移p1或p2(被取了的那个),每次前移p;
- 当p2前移到数组外头时(p2<0),a已经成型,合并成功。
合并两个有序数组(双/三指针)相关推荐
- LeetCode-双指针-88. 合并两个有序数组
88. 合并两个有序数组 思路:归并排序,一长一短,肯定会有一个先放完,放完后把另一个拷贝过去即可. 为了避免覆盖所以从最后开始向前放最大的元素 class Solution {public:void ...
- 双指针:88. 合并两个有序数组
题目链接 88. 合并两个有序数组 解题思路 一. 合并数组后排序,时间复杂度为O((n+m)log(n+m)) 代码: 快排详解 class Solution {public void merge( ...
- 中数组的合并_【美团面试题】合并两个有序数组
[美团面试题]合并两个有序数组 题目描述 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 划重点 初始化 nums1 和 ...
- 力扣刷题之合并两个有序数组
力扣刷题之合并两个有序数组 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你 合并 nu ...
- 88. 合并两个有序数组 JavaScript实现
88. 合并两个有序数组 1.直接合并后排序 将nms2放到nums1的后面,然后进行排序 var merge = function(nums1, m, nums2, n) {// 将splice将n ...
- 算法刷题打卡第11天:合并两个有序数组
合并两个有序数组 难度:简单 给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你合并 nums2 到 ...
- LeetCode——合并两个有序数组
LeetCode--合并两个有序数组 题目描述: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nu ...
- Leetcode-D33-数组-66. 加一88. 合并两个有序数组
一.复习 移除元素-双指针问题,一个指针用来记录下一个扫描哪个元素:另一个指针用来记录下一个写哪里 搜索插入位置-二分法,不断与中间位置的数字比较大小值,缩小区间范围:当两侧只差一个单位时,看val是 ...
- 数组-合并两个有序数组(双指针,从后往前)
题意: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 ...
最新文章
- MySQL之alter语句用法总结
- 专家点评Nat Micro | 朱永群组首次发现特异地切割线性泛素链的全新去泛素化酶...
- 干货 | 请收下这份2018学习清单:150个最好的机器学习,NLP和Python教程
- 大牛告诉你,只有突破程序员思维,才不会沦为码农!
- 判断javascript数组的方法
- 设置了hover伪类中有cursor:hand但是没有效果
- [译] 前端组件设计原则
- supersu_SuperSU已从Play商店中删除,这是替代使用的方法
- 前端学习(3000):vue+element今日头条管理--封装请求模块
- 蒙特卡罗方法介绍(一)
- 异步/scrapy想关
- RHEL 8 - 用podman compose替代docker compose运行Ansible Tower
- 整理的C++面试,这些是最为常见的
- java executor 例子_Java中Executor框架的实例
- JavaScript模块知识理解
- HTML+CSS+JavaScript实现植物大战僵尸(附演示地址)
- 蔡学镛:编译、反编译、反反编译(转)
- 甲骨文裁员后会打算将云计算作为主战场吗?
- 如何批量压缩图片大小?教你3个批量压缩图片的方法
- 1125 Chain the Ropes
热门文章
- R语言观察日志(part4)--paste函数
- python观察日志(part20)--列表中加号,extend,append之间的区别
- HTML property 和 attribute 的区别
- SAP 电商云 Spartacus UI DeliveryComponent 的依赖设计
- SAP UI5 Routing 路由介绍
- Angular依赖注入机制的一个错误消息:Error Cannot instantiate cyclic dependency!
- SAP Spartacus Category Navigation的accessibility问题
- SAP Spartacus界面注册用户获取OAuth Access Token的方式
- 使用Angular依赖注入自定义SAP Spartacus的ProductAdapter
- 使用xsodata文件将SAP HANA CDS view暴露成OData服务