2. 合并两个有序数组
2.合并两个有序数组
- 题目描述
- 解题思路
- 代码
题目描述
给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。
解题思路
解法一:双指针法
思路:
时间复杂度:O(n)
空间复杂度:O(m+n)=O(n)
解法二:直接合并后排序法
思路:直接将两个数组合并,然后再对合并后的数组进行排序
时间复杂度:平均情况O((m+n)log(m+n))
空间复杂度:平均情况O(log(m+n))
解法三:逆向双指针法
思路:从后往前对两个数组进行遍历比较,然后将较大的嵌入的nums1的后面
时间复杂度:O(m+n)
空间复杂度:O(l)
代码
解法一:双指针法(写的点冗余)
public static void merge(int[] nums1, int m, int[] nums2, int n) {int[] arr=new int[m+n];int i=0;int j=0;int r=0;if(m!=0 && n!=0){while(i<m && j<n){if((nums1[i]<=nums2[j])){arr[r]=nums1[i];r++;i++;}else{arr[r]=nums2[j];r++;j++;}}if(i<m){for(;i<m;i++)arr[r++]=nums1[i];}if(j<n){for (;j<n;j++)arr[r++]=nums2[j];}for(int x=0;x<m+n;x++){nums1[x]=arr[x];}}else if (m==0 && n!=0){for (int c=0;c<n;c++)nums1[c]=nums2[c];}else{}}
解法二:直接合并后排序法
public static 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);}
解法三:逆向双指针法
public static void merge3(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;}}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array
2. 合并两个有序数组相关推荐
- 数组-合并两个有序数组(双指针,从后往前)
题意: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 ...
- LeetCode-双指针-88. 合并两个有序数组
88. 合并两个有序数组 思路:归并排序,一长一短,肯定会有一个先放完,放完后把另一个拷贝过去即可. 为了避免覆盖所以从最后开始向前放最大的元素 class Solution {public:void ...
- LeetCode 88合并两个有序数组89格雷编码
微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...
- 合并两个无序数组java_88. 合并两个有序数组
88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2的 ...
- 合并两个有序数组(双/三指针)
今天写作业,合并两个有序数组a和b,时间复杂度要求O(n),空间复杂度要求O(1). 很快想到创建第三个数组c,用双指针初始化指向a和b的头元素,每次选择较大者在c上尾插进去之后,再后移相对应a或者b ...
- 双指针:88. 合并两个有序数组
题目链接 88. 合并两个有序数组 解题思路 一. 合并数组后排序,时间复杂度为O((n+m)log(n+m)) 代码: 快排详解 class Solution {public void merge( ...
- LeetCode 88. 合并两个有序数组 golang
88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 ...
- 88. 合并两个有序数组 golang
88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 ...
- 中数组的合并_【美团面试题】合并两个有序数组
[美团面试题]合并两个有序数组 题目描述 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 划重点 初始化 nums1 和 ...
- LeetCode--88.合并两个有序数组(插入法,排序法)
合并两个有序数组(C, Python) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python语言实现 1. 题目描述 难度:简单 2. 题目分析 这道题比较简单,实现方法有两种: 插入 ...
最新文章
- python实现选择排序
- 输入法大战,你用哪家输入法? | 每日趣闻
- 基础005_V7-Select IO
- Vue 中computed 与 methods 区别
- 查询Oracle正在执行的sql语句
- Win7,Win8下多实例运行Excel2010
- 对int array进行排序
- 数字电路技术可能出现的简答题_2013年9月份考试数字电子技术第二次作业
- 4-8 :button表单按钮选择器
- c语言将两个文件合成一个,keil中怎么把两个c程序怎么同时同时编译生成一个hex文件...
- C#高性能大容量SOCKET并发完成端口例子(有C#客户端)完整实例源码
- transform改变图片大小以及位置
- 手机测试人员的思维过程
- 苹果脚本入门指南 第一章-苹果编程语言介绍和编程软件打开方法及界面介绍
- Rademacher复杂度和VC-维
- 语音交友app开发中的用户积分系统
- 什么是session
- 速腾聚创激光雷达部署
- TCP长连接与短连接、心跳机制
- 小程序css样式变量/api promise化
热门文章
- nexus3安装配置
- 2015蓝桥杯python——奇妙的数字
- win8 万能驱动 32位,64位最新版 显卡驱动 网卡驱动 装机必备
- 2011 明锐 CD 大众收音机 播放SD 卡顿问题
- 有照片换发型的软件吗?看完这篇文章就知道了
- Linux系统中的DDNS(花生壳)
- 压缩文件格式未知或者数据已经被损坏 的解决方案
- android8.1.0官方下载,官方Xposed框架For Android8.0/8.1(Oreo)发布v90-beta3版本
- echarts 调整图表大小的方法
- 《分析一波NBA今年季后赛之狂野西部》程序员不好好写代码,聊上篮球了!