[leecode] 合并两个有序数组

  • 问题
  • 试图解答

问题

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

提示:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

试图解答

看到题的时候,我脑内:“啊这,这不就是前几天学的归并排序吗,大概是非递归版?”
第一版提交代码如下:

class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {int i=0,j=0,num=0;while(j<n&&i<m){if (nums1[i+j]>nums2[j]){for(int k=m+j;k>i+j;k--){nums1[k]=nums1[k-1];}nums1[i+j]=nums2[j];j++;}else{i++;}}while(j<n){nums1[i+j]=nums2[j];j++;}}
};

然后解析界面发现这不是最快的,思考了一下,是每次插入nums2的时候的循环拖了速度.
用空间换时间后,代码如下:

class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {short i = 0, j = 0, num = 0;while (j < n && i < m) {if (j + num < n&&(nums1[i + j] > nums2[j + num])){num++;}else {if (num) {for (short k = m + j + num - 1; k > i + j + num - 1; k--) {nums1[k] = nums1[k - num];}while (num) {nums1[i + j] = nums2[j];j++;num--;}}i++;}}while (j < n) {nums1[i + j] = nums2[j];j++;}}
};

但是这次提交的时候leecode的测试数据换成了如下数据

[2,0]
1
[1]
1

这样的小数据反而这么多if和循环判断的代码运行起来没有优势了,所以实际上还是可以优化的,直接把参数m和n用起来,从尾部开始倒序插入排列,避免了数据的移动和计数的空间消耗,一旦n==0了就代表排序结束了.
代码如下:

class Solution {
public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {while (m && n){if (nums1[m-1] > nums2[n-1]){nums1[m + n-1] = nums1[m-1];m--;}else{nums1[m + n-1] = nums2[n-1];n--;}}while(n){nums1[m + n-1] = nums2[n-1];n--;}}
};

但是这样leecode反而表示我内存实际上比上两个代码多用了1m,只能说不是很懂原理

[leecode] 合并两个有序数组相关推荐

  1. 两个数组合并排序python_python算法题---合并两个有序数组

    leetcode-python-合并两个有序数组 今天第一次电话面试,有点紧张,所以自己感觉表现的不是很好,面试过程中面试官问到了两个算法题,都是leecode上面的题目,而且我都做过,但是当时一下子 ...

  2. 数组-合并两个有序数组(双指针,从后往前)

    题意: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 ...

  3. LeetCode-双指针-88. 合并两个有序数组

    88. 合并两个有序数组 思路:归并排序,一长一短,肯定会有一个先放完,放完后把另一个拷贝过去即可. 为了避免覆盖所以从最后开始向前放最大的元素 class Solution {public:void ...

  4. LeetCode 88合并两个有序数组89格雷编码

    微信搜一搜:bigsai 专注于Java.数据结构与算法,一起进大厂不迷路! 算法文章题解全部收录在github仓库bigsai-algorithm,求star! 关注回复进群即可加入力扣打卡群,欢迎 ...

  5. 合并两个无序数组java_88. 合并两个有序数组

    88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2的 ...

  6. 合并两个有序数组(双/三指针)

    今天写作业,合并两个有序数组a和b,时间复杂度要求O(n),空间复杂度要求O(1). 很快想到创建第三个数组c,用双指针初始化指向a和b的头元素,每次选择较大者在c上尾插进去之后,再后移相对应a或者b ...

  7. 双指针:88. 合并两个有序数组

    题目链接 88. 合并两个有序数组 解题思路 一. 合并数组后排序,时间复杂度为O((n+m)log(n+m)) 代码: 快排详解 class Solution {public void merge( ...

  8. LeetCode 88. 合并两个有序数组 golang

    88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 ...

  9. 88. 合并两个有序数组 golang

    88. 合并两个有序数组 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 ...

最新文章

  1. 【Python】Python中令人头疼的变量作用域问题,终于弄清楚了
  2. IOS 控件 - Swift 集成 IOS 自带 API 扫描二维码
  3. 如何在SAP S/4HANA Cloud系统里创建employee
  4. 二、数据库设计与操作
  5. input输入数字验证
  6. Windows下GIt入门试验配置教程单机版
  7. ios中生成uuid
  8. 修复 www.shouyela.com 造成的 IE 问题
  9. linux逻辑卷管理(LVM)
  10. JavaScript学习指南集锦
  11. 电脑白屏,“笔记本电脑开机白屏的原因和解决方法”的解决方案
  12. 第三届火焰杯软件测试初赛题目
  13. 修正逆解文章——六轴UR机械臂正逆运动学求解_MATLAB代码(标准DH参数表)
  14. 微软面试题:站在地球上的某一点,向南走一公里,然后向东走一公里,最后向北走一公里,回到了原点。地球上有多少个满足这样条件的点?
  15. 计算机自培计划,个人年度自培计划
  16. GET POST 区别!别听他们扯犊子,越看越气人
  17. 微信小程序有什么商业价值?
  18. 最近使用git的错误----“failed to push some refs to ...”与“On branch master Your branch is up to date with ‘”
  19. 余江php,余江通报9起违纪案例,其中这个局竟然有8起
  20. Particle Swarm Optimization粒子群优化算法(PSO算法)概念及实战

热门文章

  1. 网络程序设计结课总结——神经网络篇
  2. Echarts 地图控件tooltip多行显示
  3. gdb openocd jlink arm-a9调试
  4. python量化实战 顾比倒数线_顾比倒数线的画法及使用条件详解
  5. Creator+微信小游戏(2):服务器远程加载资源(4M限制、socketio问题)
  6. 微信小程序+VUE食堂订餐点餐系统(含源码+论文+答辩PPT等)
  7. 基于微信小程序食堂订餐系统源码(微信小程序毕业设计)
  8. linux服务器开启远程连接不上,远程SSH连接服务与基本排错经验总结
  9. 图片可以转换成pdf吗?
  10. 用HTML实现简易版计算器