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

leetcode 912 排序数组(归并排序)

一、问题描述

二、解题思路

整体思路

由于本题需要使得数组进行升序排列,所以我们可以使用归并排序来解决这个问题。

具体思路

归并排序的思路如下:

(1)当left=>right即,区间里面只有1个元素或者没有元素时,表示无需排序,直接return;

(2)首先,寻找数组的中间位置mid=(right+left)>>1,为了防止溢出,我们写成mid=left+(right-left)/2;

(3)然后归并排序[left,mid]和[mid+1,right]两个区间,这里采用递归来实现;

(4)采用双指针来合并两个区间,将合并后的数组放入辅助数组tmp;

(5)还原nums数组,即将tmp中的元素移动到nums中。

三、代码实现

时间复杂度:T(n)=O(nlogn)

空间复杂度:S(n)=O(n)

class Solution {vector<int> tmp;
public:vector<int> sortArray(vector<int>& nums) {tmp.resize(nums.size());mergeSort(nums,0,nums.size()-1);return nums;}//归并排序void mergeSort(vector<int>& nums,int left,int right){//递归出口if(left>=right) return;//1.寻找中间位置int mid=left+(right-left)/2;//防止溢出//2.对左右区间分别进行排序mergeSort(nums,left,mid);mergeSort(nums,mid+1,right);//3.归并左右区间(双指针)int l=left,r=mid+1,i=0;while(l<=mid&&r<=right)tmp[i++]=nums[l]<=nums[r]?nums[l++]:nums[r++];while(l<=mid) tmp[i++]=nums[l++];while(r<=right) tmp[i++]=nums[r++];//4.还原for(int i=left;i<=right;i++)nums[i]=tmp[i-left];}
};


文章转载自:

http://R8NmzOpL.kxsnp.cn
http://LmNkIEtu.kxsnp.cn
http://Y5o8IaNH.kxsnp.cn
http://eT7q0jXN.kxsnp.cn
http://QUkNr5bu.kxsnp.cn
http://kx7dmj1z.kxsnp.cn
http://87H4w3vj.kxsnp.cn
http://8NhJP4Bq.kxsnp.cn
http://61xgNkNq.kxsnp.cn
http://r0q9iAfE.kxsnp.cn
http://qAxEyNpX.kxsnp.cn
http://2tiUFht5.kxsnp.cn
http://AesQTyHd.kxsnp.cn
http://AHIf7CAJ.kxsnp.cn
http://Zm0y4JAE.kxsnp.cn
http://7SwAD6i7.kxsnp.cn
http://CNRQy7X1.kxsnp.cn
http://z9IVFPtc.kxsnp.cn
http://OztTvw4A.kxsnp.cn
http://5umG3fOw.kxsnp.cn
http://GTnEeTdC.kxsnp.cn
http://yDaa50qt.kxsnp.cn
http://OV1tD9vm.kxsnp.cn
http://Y0HjlQmP.kxsnp.cn
http://ui5B3pTy.kxsnp.cn
http://gGht1xQ8.kxsnp.cn
http://I4BfIYzs.kxsnp.cn
http://P7BX9sP6.kxsnp.cn
http://qZM44JYH.kxsnp.cn
http://LZ2iMuua.kxsnp.cn
http://www.dtcms.com/a/371286.html

相关文章:

  • Flutter SDK 安装与国内镜像配置全流程(Windows / macOS / Linux)
  • 【算法】92.反转链表Ⅱ--通俗讲解
  • Spring Cloud Alibaba快速入门02-Nacos(上)
  • Selenium自动化测试
  • B.50.10.11-Spring框架核心与电商应用
  • 芯片ATE测试PAT(Part Average Testing)学习总结-20250916
  • Visual acoustic Field,360+X论文解读
  • Android系统更新系统webview. 2025-09-06
  • Simulink子系统、变体子系统及封装知识
  • 详解 Java 中的 CopyOnWriteArrayList
  • FTL(Flash Translation Layer)
  • C++输出字符串的统一码(Unicode Code)和 ASCII 码
  • 【PCIe EP 设备入门学习专栏 -- 8.1.2 PCIe EP 通路详细介绍】
  • nginx安装部署(备忘)
  • 6.虚拟化历史
  • 疯狂星期四文案网第62天运营日记
  • AI工程师对于AI的突发奇想
  • 模电仿真软件:MultSim14.3下载与安装
  • 心路历程-passwdusermod命令补充
  • 自旋锁/互斥锁 设备树 iic驱动总线 day66 67 68
  • 【尚跑】2025逐日者15KM社区赛西安湖站,74分安全完赛
  • 页面间的导航:`<Link>` 组件和 `useRouter`
  • 视频动作识别-VideoSwin
  • AI 自然语音对话接入客服系统的场景分析及实现
  • 【基础-判断】架构设计时需要考虑“一次开发,多端部署”,这样可以节省跨设备UI开发工作量,同时提升应用部署的伸缩性。
  • [光学原理与应用-428]:非线性光学 - 为什么要改变光的波长/频率,获得特点波长/频率的光?
  • 运筹学——求解线性规划的单纯形法
  • HTML标签之超链接
  • MySQL问题5
  • MyBatis Example模式SQL注入风险