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

2570. 合并两个二维数组 - 求和法

题目链接:

2570. 合并两个二维数组 - 求和法

题目描述:

给你两个 二维 整数数组 nums1 和 nums2.

  • nums1[i] = [idi, vali] 表示编号为 idi 的数字对应的值等于 vali 。
  • nums2[i] = [idi, vali] 表示编号为 idi 的数字对应的值等于 vali 。

每个数组都包含 互不相同 的 id ,并按 id 以 递增 顺序排列。

请你将两个数组合并为一个按 id 以递增顺序排列的数组,并符合下述条件:

  • 只有在两个数组中至少出现过一次的 id 才能包含在结果数组内。
  • 每个 id 在结果数组中 只能出现一次 ,并且其对应的值等于两个数组中该 id 所对应的值求和。如果某个数组中不存在该 id ,则假定其对应的值等于 0 。

返回结果数组。返回的数组需要按 id 以递增顺序排列。

题目分析:

该题用于理解二维数组,使用双指针进行赋值

题解:

// 方法1:指针
/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/
int** mergeArrays(int** nums1, int nums1Size, int* nums1ColSize, int** nums2, int nums2Size, int* nums2ColSize, int* returnSize, int** returnColumnSizes) {// 返回数组,大小为num1Size+num2Sizesint** array = malloc(sizeof(int *) * (nums1Size + nums2Size));// 返回的列大小,只有一行,全为2*returnColumnSizes = malloc(sizeof(int) * (nums1Size + nums2Size));// 行指针p1指向nums1int** p1 = nums1;// 行指针p2指向nums2int** p2 = nums2;// 计数,返回的数组大小int cnt = 0;// 双指针赋值while(p1 < nums1 + nums1Size && p2 < nums2 + nums2Size){// 为当前行分配空间array[cnt] = malloc(sizeof(int) * 2);// 当前行的列数为2(*returnColumnSizes)[cnt] = 2;// 相等就先相加,再赋值,指针++,cnt++if ((*p1)[0] == (*p2)[0]) {array[cnt][0] = (*p1)[0];array[cnt][1] = (*p1)[1] + (*p2)[1];cnt++;p1++;p2++;}else if((*p1)[0] > (*p2)[0]){array[cnt][0] = (*p2)[0];array[cnt][1] = (*p2)[1];cnt++;p2++;}else{array[cnt][0] = (*p1)[0];array[cnt][1] = (*p1)[1];cnt++;p1++;}}// 若nums1未完全进入返回数组,则将剩余的添加到返回数组while(p1 < nums1 + nums1Size){array[cnt] = malloc(sizeof(int) * 2);(*returnColumnSizes)[cnt] = 2;array[cnt][0] = (*p1)[0];array[cnt][1] = (*p1)[1];cnt++;p1++;}// 若nums1未完全进入返回数组,则将剩余的添加到返回数组while(p2 < nums2 + nums2Size){array[cnt] = malloc(sizeof(int) * 2);(*returnColumnSizes)[cnt] = 2;array[cnt][0] = (*p2)[0];array[cnt][1] = (*p2)[1];cnt++;p2++;}// 返回数组大小为cnt*returnSize = cnt;return array;
}// 方法2:索引
/*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/
int** mergeArrays(int** nums1, int nums1Size, int* nums1ColSize, int** nums2, int nums2Size, int* nums2ColSize, int* returnSize, int** returnColumnSizes) {int** array = malloc(sizeof(int *) * (nums1Size + nums2Size));*returnColumnSizes = malloc(sizeof(int) * (nums1Size + nums2Size));int p1 = 0;int p2 = 0;int cnt = 0;while(p1 < nums1Size && p2 < nums2Size){array[cnt] = malloc(sizeof(int) * 2);(*returnColumnSizes)[cnt] = 2;if(nums1[p1][0] == nums2[p2][0]){array[cnt][0] = nums1[p1][0];array[cnt][1] = nums1[p1][1] + nums2[p2][1];cnt++;p1++;p2++;}else if(nums1[p1][0] > nums2[p2][0]){array[cnt][0] = nums2[p2][0];array[cnt][1] = nums2[p2][1];cnt++;p2++;}else{array[cnt][0] = nums1[p1][0];array[cnt][1] = nums1[p1][1];cnt++;p1++;}}while(p1 < nums1Size){array[cnt] = malloc(sizeof(int) * 2);(*returnColumnSizes)[cnt] = 2;array[cnt][0] = nums1[p1][0];array[cnt][1] = nums1[p1][1];cnt++;p1++;}while(p2 < nums2Size){array[cnt] = malloc(sizeof(int) * 2);(*returnColumnSizes)[cnt] = 2;array[cnt][0] = nums2[p2][0];array[cnt][1] = nums2[p2][1];cnt++;p2++;}*returnSize = cnt;return array;
}

相关文章:

  • 每日leetcode
  • 手搓四人麻将程序
  • 如何应对kaggle离线安装环境?
  • 5月21日星期三今日早报简报微语报早读
  • Cross-Mix Monitoring for Medical Image Segmentation With Limited Supervision
  • 【C语言】复习~数组和指针
  • 云DNS智能解析:实现多区域部署
  • SpringBoot JAR 启动原理
  • 【Linux高级全栈开发】2.2.1 Linux服务器百万并发实现2.2.2 Posix API与网络协议栈
  • Mysql差异备份与恢复
  • 小黑黑prompt表述短语积累1
  • YOLO训练输入尺寸代表什么 --input_width 和 --input_height 参数
  • QGIS3.40.X使用OSM获取数据
  • 实践大模型提示工程(Prompt Engineering)
  • 民锋视角下的多因子金融分析模型实践
  • 电商项目-商品微服务-规格参数管理,分类与品牌管理需求分析
  • Spring AOP拦截失败
  • Spring IOCDI————(2)
  • 如何提灯验车
  • Android13 wifi设置国家码详解
  • 手机制作网站的软件有哪些/怎么写软文推广
  • 企业做英文网站/百度电脑端入口
  • 本地免费发布信息网站/aso安卓优化公司
  • 制作自己的名字免费的/seo草根博客
  • 微商做网站/企业关键词优化公司