首页 > 其他分享 >合并两个有序数组

合并两个有序数组

时间:2024-02-21 16:13:06浏览次数:23  
标签:cur -- 元素 合并 数组 int 有序 nums1 nums2

题目描述:

两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。合并 nums2 到 nums1中,使合并后的数组同样按非递减顺序排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

 

  void merge(int *nums1,int nums1Size,int m,int *nums2,int nums2Size,int n){
      int p,q,tail,cur;
      p=m-1;
      q=n-1;
      tail=m+n-1;
      while(p>=0 || q>=0){
          if(q==-1){
              cur=nums1[p--];
          }else if(p==-1){
              cur=nums2[q--];
          }else if(nums1[p] > nums2[q]){
              cur=nums1[p--];
          }else{
              cur=nums2[q--];
          }
          nums1[tail--]=cur;
      }
  }

比较条件的编写:

  if(nums1[p]>nums2[q]){
    cur=nums1[p--];      
  }

而并不是:

  if(nums1[p--]>nums2[q--]){
    cur=nums1[p];      
  }

本质上此题设置了三个指针,一个指向nums1数组的最后一个元素,一个指向nums2数组的最后一个元素,一个指向合并后数组的最后一个元素。然后将待合并的元素从后往前放置,这样使得空间复杂度为O(1),判断条件考虑两种特殊情况:①当nums1的元素遍历完后nums2仍有元素;②当nums2的元素遍历完后nums1仍有元素

标签:cur,--,元素,合并,数组,int,有序,nums1,nums2
From: https://www.cnblogs.com/WangLiy/p/18025479

相关文章

  • 数组
    数组1)数组的创建方式:a.静态创建int[]a={1,2,3,4,5};b.静态创建int[]a=newint[]{1,2,3,4,5};c.动态创建int[]a=newint[5];后续可以进行赋值2)一般通过数组的下标操作元素3)数组的长度:数组一旦创建,长度不可改变,长度允许为04)数组的创建过程a.根据数组的类型与长......
  • antd 单元格合并处理
    实现效果代码tableData为Table的数据constmergeCells=(text,dataSource,index,key)=>{//上一行该列数据是否一样if(index!==0&&text===dataSource[index-1][key]){return0}letrowSpan=1//判断下一行是否相等f......
  • Git合并固定分支的某一部分至当前分支
    在Git中,通常使用gitmerge命令来将一个分支的更改合并到另一个分支。如果你只想合并某个分支的一部分代码,可以使用以下两种方法:1.批量文件合并1.1.创建并切换到一个新的临时分支首先,从要合并的源分支(即要提取代码的分支)中创建并切换到一个新的临时分支。这样可以在该分......
  • 【数据结构】数组、稀疏矩阵的操作、广义表
    数组数组:按一定格式排列起来的,具有相同类型的数据元素的集合一维数组:若线性表中的数据元素为非结构的简单元素,则称为一维数组二维数组:若一维数组中的数据元素又是一维数组结构,则称为二维数组数组基本操作:一般来说,只有存取和修改这两种操作数组一般采用顺序存储结构二维数组......
  • 代码随想录 day56 最长递增子序列 最长连续递增序列 最长重复子数组
    最长递增子序列dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度状态转移方程的含义:位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列+1的最大值。最长连续递增序列dp[i]:以下标i为结尾的连续递增的子序列长度为dp[i]。如果nums[i]>nums[i-1......
  • 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉
    669.修剪二叉搜索树 题目链接:669.修剪二叉搜索树-力扣(LeetCode)思路:本题原来想沿用上一次最后一道题的思路,用删除二叉搜索树特定值节点的方法来解决,但是会报错,找不出问题所在(在评论区也是一堆套用450代码报错的)。只能参考官网答案了。官网的方法没有用delete,但是思想是一直......
  • 情书密码—树状数组
    题目描述有消息称:绝恋找到了自己的MissRight,正准备自己的表白。绝恋已经写好了情书,但为了避免其它人截获,他对情书进行加密。为了打探绝恋的私密,你冒着生命危险终于搞到了这封情书。原以为可以轻易将情书解密,结果竟然发现聪明的绝恋并没有直接写出加密用的密码,而是在那粉红色的......
  • golang数组&切片&map
    数组数组声明funcmain(){ /*语法一*///数组名字[数组长度]数组类型 //声明一个数组长度为3类型是int会初始化为int类型的零值,默认值是[000] //声明数组的时候指定长度是一个常量,数组的不可改变,超出长度会报错 vararr[3]int //数组赋值 arr[0]=1......
  • 代码随想录算法训练营第二十三天 | 538.把二叉搜索树转换为累加树, 108.将有序数组转
     669.修剪二叉搜索树 已解答中等 相关标签相关企业 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树 不应该 改变保留在树中的元素的相对结构(即,如果......
  • 【学习笔记】后缀数组(SA)
    前言先把SA给写出来,SAM暂时还没学会,学会了应该也不会写,因为构造过程过于繁琐。本文可能对SA的算法流程和代码实现上的介绍相对简略,主要介绍一些常见用途。约定无特殊说明字符串的下标从\(1\)开始。无特殊说明\(s\)表示字符串,\(n\)表示字符串长度。“后缀\(i\)”......