当前位置: 首页 > news >正文

力扣面试经典150 88. 合并两个有序数组 归并排序的merge函数

题目链接

规定了时间我首先想到的是归并排序,以时间换空间,题目要求时间复杂度O(m+n)
提示:

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

而且这个题理论上,是合并,所以得把最后合并的结果放到nums1[]上
下面是代码

classSolution{public:voidmerge(vector<int>&nums1,intm,vector<int>&nums2,intn){vector<int>temp(nums1.begin(),nums1.begin()+m);intp=0;intp1=0;intp2=0;while(p1<m&&p2<n){if(temp[p1]<=nums2[p2])nums1[p++]=temp[p1++];elsenums1[p++]=nums2[p2++];}while(p1<m)nums1[p++]=temp[p1++];while(p2<n)nums1[p++]=nums2[p2++];}};

然后再复习一下归并排序
这么多年了,发现自己学习算法过于死板
其实归并排序是一棵归并排序二叉树。

那么一涉及到树就很容易理解,这里头有递归,所以归并排序是由递归和merge函数组合来实现的,那个大的递归函数就是

voidmergeSort(vector<int>&arr,intl,intr){if(l>=r)returnintmid=(l+r)/2;mergesort(arr,l,mid);mergesort(arr,mid,r);merge(arr,l,mid,r);}

下面是完整的归并排序的代码

#include<iostream>#include<vector>using namespace std;// 合并两个有序区间 [l, mid] 和 [mid+1, r]voidmerge(vector<int>&arr,intl,intmid,intr){vector<int>temp(r-l+1);inti=l;intj=mid+1;intk=0;while(i<=mid&&j<=r){if(arr[i]<=arr[j]){temp[k++]=arr[i++];}else{temp[k++]=arr[j++];}}while(i<=mid)temp[k++]=arr[i++];while(j<=r)temp[k++]=arr[j++];// 复制回原数组for(intp=0;p<temp.size();++p){arr[l+p]=temp[p];}}// 归并排序递归voidmergeSort(vector<int>&arr,intl,intr){if(l>=r)return;intmid=(l+r)/2;mergeSort(arr,l,mid);mergeSort(arr,mid+1,r);merge(arr,l,mid,r);}intmain(){vector<int>arr={5,2,9,1,5,6,3,8};cout<<"排序前:";for(intx:arr)cout<<x<<" ";cout<<endl;mergeSort(arr,0,arr.size()-1);cout<<"排序后:";for(intx:arr)cout<<x<<" ";cout<<endl;return0;}

直接从后面替换插入的方法

classSolution{public:voidmerge(vector<int>&nums1,intm,vector<int>&nums2,intn){inti=nums1.size()-1;n--;m--;while(n>=0){while(m>=0&&nums1[m]>nums2[n]){swap(nums1[i--],nums1[m--]);}swap(nums1[i--],nums2[n--]);}}};
http://www.jsqmd.com/news/495236/

相关文章:

  • 众合食品包装多样化程度怎样,环保性能好不好值得推荐吗? - 工业品网
  • 2026年推荐凯鑫防火,山东地区便宜又靠谱的防火板施工之选 - 工业推荐榜
  • all-in-rag零散的笔记(自存/持续更新)
  • IntelliJ IDEA Maven 按钮区别详解:Reload vs Sync
  • 盘点2026年浙江值得选购的轻钢龙骨防火板吊顶,推荐优质施工服务 - 工业设备
  • 盒马鲜生购物卡回收攻略 - 团团收购物卡回收
  • 2026年 油冷机/水冷机厂家推荐排行榜:高效温控与稳定运行,工业冷却设备实力品牌深度解析 - 品牌企业推荐师(官方)
  • 洗地机刷盘电机精准选型指南
  • 2026年防火堵料加工厂价格大揭秘,昊优环保性价比高 - 工业品牌热点
  • 全网最全:万里通积分卡线上回收方法与渠道对比分析5大注意事项 - 团团收购物卡回收
  • 淄博靠谱的别墅加装电梯定制厂家选购要点有哪些? - myqiye
  • AI智能课堂系统源码:AI课程生成与在线教学管理解决方案
  • 参数调优
  • 揭秘京东e卡变现秘诀,这些回收渠道你知道吗? - 团团收购物卡回收
  • 讲讲新疆隧道防火涂料服务商哪个靠谱,价格怎样 - myqiye
  • 替代国外品牌,国内有稳定的变压器厂家吗?
  • 【MySQL】事务:如何使用事务
  • 马斯克点赞,Karpathy 转发!Kimi 一刀拆了 Transformer 十年地基
  • 2026年 硅胶带厂家推荐排行榜,蠕动泵/导电/医用级/食品级/双色/新能源/工业级/阻燃/弹簧/耐高温硅胶带,专业定制与高适配性深度解析 - 品牌企业推荐师(官方)
  • “数字员工”重构企业生产单元
  • Nginx与frp结合实现局域网和公网的双重https服务
  • 山东一卡通线上回收靠谱吗?回收心得分享与平台推荐 - 团团收购物卡回收
  • 2026年辽宁石棉垫片好用品牌排名,专业石棉垫片加工厂推荐 - 工业推荐榜
  • 【ROS2】ROS 2 中 Content Filtering (内容过滤)的简介与使用
  • 告别网络依赖:完全离线的 AI 开发环境搭建指南
  • 【语音去噪】基于matlab融合小波变换和维纳滤波语音信号去噪(含SNR)【含Matlab源码 15192期】
  • 一部中短波发射机的一生——从出厂到退役的全生命周期成本
  • 性能测试时,通过查询数据库获取大量数据会影响整体的性能吗?
  • 搞定2026年生鲜促销图,我的经验是别直接套模板
  • AI 编程4:LangGraph 实战:动态并行 Worker 编排器模式,让 AI 多任务并行生成报告-test7