首页 > 编程语言 >【LeetCode算法】第88题:合并两个有序数组

【LeetCode算法】第88题:合并两个有序数组

时间:2024-05-28 20:59:33浏览次数:23  
标签:-- 88 nums1 int 算法 nums2 数组 LeetCode 解法

目录

一、题目描述

二、初次解答

三、官方解法

四、总结


一、题目描述

二、初次解答

1. 思路:首次想到的解法:定义一个m+n长度的辅助数组,从头遍历这两个数组,谁小就放进辅助数组中并且对应往后走,最后使用memcpy函数将辅助数组内容拷贝到nums1中。这种解法容易想到,但是空间复杂度为O(m+n)。其次想到的解法:定义三个指针i,j,k,其中i指向nums1末尾的有效位,j指向nums2的末尾,k指向nums1的m+n-1位置。循环比较nums1[i]和nums2[j]的大小,谁大就拷贝至nums1[k]并且对应指针-1。当退出循环后,将两个数组中剩下的元素依次拷贝至nums1[k]中。

2. 代码:对应上面的第二种解法。

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
    int temp[m+n];
    int i=m-1,j=n-1,k=nums1Size-1;
    while(j>=0 && i>=0){
        if(nums2[j]>=nums1[i]){
            nums1[k--]=nums2[j--];
        }else{
            nums1[k--]=nums1[i--];
        }
    }
    while(i>=0)
        nums1[k--]=nums1[i--];
    while(j>=0)
        nums1[k--]=nums2[j--];
}

3. 优点:空间复杂度为O(1)且时间复杂度为O(m+n)。

4. 缺点:速度依旧不够快。

三、官方解法

官方解法二和三分别对应上述我想到的第一种解法和第二种解法。官方解法一直接采用合并后排序的方法,调用了qsort函数。

四、总结

合并两个有序数组,可以使用双指针法从后往前遍历,并将元素拷贝至目标位置。

标签:--,88,nums1,int,算法,nums2,数组,LeetCode,解法
From: https://blog.csdn.net/weixin_46249470/article/details/139275001

相关文章

  • 【LeetCode算法】第83题:删除排序链表中的重复元素
    目录一、题目描述二、初次解答三、官方解法四、总结一、题目描述二、初次解答1.思路:双指针法,只需遍历一遍。使用low指向前面的元素,high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面,实现重复元素的删除。2.代码:/***Definitionfor......
  • 代码随想录算法训练营第七天|454(四数相加||),383(赎金信),15(三数之和),18(四数之和)
    哈希三数之和和四数之和,和两数之和一样,是对一个数组来进行检索。因为要求元组不能重复,需要用多指针的方法来遍历和判断。由于两数之和没有这个要求且要返回下标,所以用了哈希表。但哈希表难以检测是否重复,不如双指针直接。四数相加||是对四个数组来做相加,且不要求元组重复,可用哈......
  • 实现双链表各种基本运算的算法
    实验三:实现双链表各种基本运算的算法一、实验目的与要求目的:领会双链表存储结构和掌握双链表中各种基本运算算法设计。内容:编写一个程序dlinklist.cpp,实现双链表的各种基本运算和整体建表算法(假设链表的元素类型ElemType为char),并在此基础上设计一个程序exp2-3.cPp,......
  • 算法题模版(C语言)
    自用总结一、最大公约数(gcd)函数法:递归法(最简):二、最小公倍数(lcm)函数法:算出最大公约数后无需递归三、斐波那契数列(fibonacci)(fib)递归法(最简):    ......
  • 代码随想录算法训练营day6(哈希表)
    代码随想录算法训练营day6(哈希表):学习内容:哈希表基础内容:哈希表定义:哈希表是根据关键码的值而直接进行访问的数据结构目的:一般哈希表都是用来快速判断一个元素是否出现集合里。哈希函数定义:通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据......
  • I. NeRF 及其衍生算法的初步探究
    I.NeRF及其衍生算法的初步探究视频链接:【AI講壇】NeRF與它的快樂夥伴們[Neuralradiancefields]NeRF的主要优势:能够正确处理反光、估算的深度较准、等等。一、nerfinthewildGoogleResearch、未开源NeRFintheWild:NeuralRadianceFieldsforUnconstrainedPhot......
  • 算法课程笔记——素数朴素判定&埃氏筛法
    算法课程笔记——素数朴素判定&埃氏筛法sqrt返回浮点数,而且这样可防溢出优化i*i会更快......
  • 代码随想录算法训练Day20|LeetCode654-最大二叉树、LeetCode617-合并二叉树、LeetCode
    最大二叉树题目描述力扣654-最大二叉树给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。......
  • 素数判定算法 初级
    前置知识Cpp实现基础算法//basemethodboolbasement(intnum){ for(inti=2;i<=sqrt(num);++i) { if(num%i==0) returnfalse; } returntrue;}证明筛法初步根据初等数学的知识,如果一个数不是2的倍数,那么它肯定不是2的倍数的倍数,所以,进一步的......
  • 题解/算法 {C. Goose Goose Duck}
    题解/算法{C.GooseGooseDuck}@LINK:https://codeforces.com/gym/105184;令A[N]表示这N个人的区间;比如答案是[a,b,c,d]那么他一定满足:A[a].lef<=0<=A[a].rig,A[b].lef<=1<=A[b].rig,A[c].lef<=2<=A[c].rig,…贪心;对于最开头的人来说,令集合S:......