news 2026/4/18 2:09:27

LeetCode 归并排序 题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 归并排序 题解

LeetCode 归并排序 题解

题目描述

实现归并排序算法,对一个整数数组进行排序。

示例 1:

输入:nums = [5,2,3,1] 输出:[1,2,3,5]

示例 2:

输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5]

解题思路

方法:归并排序

思路

  • 归并排序是一种分治算法,它的工作原理是:将数组分成两半,对每一半进行排序,然后将排序好的两半合并成一个有序数组。
  • 归并排序的过程是递归的,它不断地将数组分成更小的子数组,直到子数组的长度为 1,然后开始合并。

复杂度分析

  • 时间复杂度:O(n log n),其中 n 是数组的长度。无论输入数据如何,时间复杂度都是 O(n log n)。
  • 空间复杂度:O(n),需要使用额外的空间来存储合并过程中的临时数组。

代码实现

方法:归并排序

def merge_sort(nums): # 递归终止条件:数组长度小于等于 1 if len(nums) <= 1: return nums # 计算中间位置 mid = len(nums) // 2 # 递归排序左半部分 left = merge_sort(nums[:mid]) # 递归排序右半部分 right = merge_sort(nums[mid:]) # 合并两个有序数组 return merge(left, right) def merge(left, right): # 初始化结果数组和指针 result = [] i = j = 0 # 合并两个有序数组 while i < len(left) and j < len(right): if left[i] < right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 # 将剩余元素添加到结果数组 result.extend(left[i:]) result.extend(right[j:]) return result # 测试 nums1 = [5,2,3,1] print(merge_sort(nums1)) # 输出:[1,2,3,5] nums2 = [5,1,1,2,0,0] print(merge_sort(nums2)) # 输出:[0,0,1,1,2,5]

测试用例

测试用例 1:

输入:nums = [5,2,3,1]
输出:[1,2,3,5]

测试用例 2:

输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]

总结

本题是排序算法的经典问题,主要考察对归并排序算法的理解和实现。归并排序是一种分治算法,它通过将数组分成两半,对每一半进行排序,然后合并排序好的两半来完成排序。

归并排序的核心思想是:将数组递归地分成更小的子数组,直到子数组的长度为 1,然后开始合并,每次合并两个有序数组。

这种方法的时间复杂度为 O(n log n),是一种稳定的排序算法,适用于大规模数据的排序。掌握归并排序的原理,对于理解分治算法和递归思想非常重要。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:05:55

从零搭建RDA5807收音机:硬件连接与I2C驱动实战

1. RDA5807收音机模块初探 第一次拿到RDA5807模块时&#xff0c;我简直不敢相信这么小巧的板子能实现完整的FM收音功能。这个比指甲盖大不了多少的模块&#xff0c;在某宝上只要几块钱就能买到&#xff0c;但功能却相当强大。RDA5807是RDA微电子推出的一款单芯片FM接收解决方案…

作者头像 李华
网站建设 2026/4/18 2:05:17

2026 量化交易进阶:基于多因子模型与 AI 引擎构建防御性交易系统

在 2026 年的市场环境下&#xff0c;个人交易者面临的竞争已从单纯的“信息获取”转向了“模型稳定性”的博弈。对于技术从业者而言&#xff0c;编写一个基础的交易脚本并不困难&#xff0c;但如何解决策略在不同市场环境下的“鲁棒性”问题&#xff0c;才是构建防御性投资系统…

作者头像 李华
网站建设 2026/4/18 2:03:15

别再踩坑了!手把手教你用VS2019搞定Simulink与CANOE 15.0联合仿真环境搭建

VS2019SimulinkCANoe 15.0联合仿真环境搭建避坑全指南 当Simulink遇上CANoe&#xff0c;本是控制器开发与测试的黄金组合&#xff0c;但无数工程师在环境搭建阶段就折戟沉沙。我曾用三天时间反复重装系统七次&#xff0c;才摸清那些官方文档从未提及的隐藏陷阱。这份指南将带你…

作者头像 李华
网站建设 2026/4/18 1:53:43

Python3 WebSocket实战:从基础连接到异步高并发,主流模块选型指南

1. WebSocket基础与Python模块选型指南 第一次接触WebSocket时&#xff0c;我被它和HTTP的长轮询对比惊艳到了。想象一下咖啡馆里两个朋友的对话&#xff1a;HTTP就像每次问"有新消息吗&#xff1f;"都要重新打招呼&#xff0c;而WebSocket则是一次握手后就能持续聊天…

作者头像 李华