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

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;
}

http://www.xdnf.cn/news/7832.html

相关文章:

  • RTMP协议解析【三】
  • 【论文复现】——基于NDT与ICP结合的点云配准算法(matlab版)
  • 网页 HTML布局(详解)
  • 精益数据分析(74/126):从愿景到落地的精益开发路径——Rally的全流程管理实践
  • 新能源汽车充电桩资源如何利用资源高效配置?
  • Linux 内核音视频架构(V4L2 )介绍
  • 算法中的数学:欧拉函数
  • 工作流引擎-03-聊一聊什么是流程引擎(Process Engine)?
  • 用户缓冲区
  • JavaScript 函数、方法、限定符
  • 关于Vue自定义组件封装的属性/事件/插槽的透传问题
  • 密码合集(不定期更新)
  • 【VS2017】cpp文件字符编码异常导致编译报错
  • 老牌硬件检测工具的现代应用场景分析
  • 【动手学深度学习】1.3. 各种机器学习问题
  • spring的注入方式都有什么区别
  • 网页表格转换为markdown
  • 仅修改文件名会导致文件的MD5值发生变化吗?
  • 制造业ERP系统选型与实施避坑探讨
  • java加强 -网络编程
  • iframe加载或者切换时候,短暂的白屏频闪问题解决
  • Oracle Enqueue Names
  • MySQL中的重要常见知识点(入门到入土!)
  • QT中信号和事件的区别
  • Panasonic松下焊接机器人节气
  • Web3 领域中的一些专业术语
  • Nginx负载均衡配置详解
  • 14、自动配置【源码分析】-初始加载自动配置类
  • 双活数据中心解决方案
  • KubeVirt虚拟机热迁移