力扣刷题之2956.找到两个数组中的公共元素

题干描述:

给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,它们分别含有 n 和 m 个元素。请你计算以下两个数值:

  • answer1:使得 nums1[i] 在 nums2 中出现的下标 i 的数量。
  • answer2:使得 nums2[i] 在 nums1 中出现的下标 i 的数量。

返回 [answer1, answer2]

示例 1:

输入:nums1 = [2,3,2], nums2 = [1,2]

输出:[2,1]

解释:

示例 2:

输入:nums1 = [4,3,2,3,1], nums2 = [2,2,5,2,3,6]

输出:[3,4]

解释:

nums1 中下标在 1,2,3 的元素在 nums2 中也存在。所以 answer1 为 3。

nums2 中下标在 0,1,3,4 的元素在 nums1 中也存在。所以 answer2 为 4。

示例 3:

输入:nums1 = [3,4,2,3], nums2 = [1,5]

输出:[0,0]

解释:

nums1 和 nums2 中没有相同的数字,所以答案是 [0,0]。

题干分析:

已知题目要求计算以下两个数值:

1.answer1:计算nums1【i】在nums2中出现的下标i的数量

2.answer2:计算num2【i】nums1中出现的下标i的数量

        具体来说就是,对于每个数组中的每个元素,我们需要检查它是否子啊另一个数组中出现,并且如果出现了,则计数。

解题步骤:

  1. 遍历nums1中的每个元素,检查它是否在nums2中出现,如果出现则answer1+1。
  2. 遍历nums2中的每个元素,检查它是否在nums1中出现,如果出现则answer2+1。

相关的完整的实现代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* 函数:findIntersectionValues
* 相关参数:
* nums1:第一个数组
* nums1Size:第一个数组的大小
* nums2:第二个数组
* numsSize:第二个数组的大小
* returnSize:返回数组的大小(输出参数)
*/
int* findIntersectionValues(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
	//分配大小为2的数组内存,并初始化为0
	int* ret = (int*)malloc(sizeof(int) * 2);
	memset(ret, 0, sizeof(int) * 2);

	//计算nums1中的元素子啊nums2中出现的次数
	for (int i = 0; i < nums1Size; i++)
	{
		for (int j = 0; j < nums2Size; j++) {
			if (nums1[i] == nums2[j])
			{
				ret[0]++;
				break;//一旦找到匹配元素,跳出内存循环
			}
		}
	}
	//计算nums2中的元素在nums1中出现的次数
	for (int i = 0; i < nums2Size; i++)
	{
		for (int j = 0; j < nums1Size; j++) {
			if (nums2[i] == nums1[j])
			{
				ret[1]++;
				break;//一旦找到匹配元素,跳出内存循环
			}
		}
		//设置返回的数组大小为2
		*returnSize = 2;
		return ret;
	}
}
int main() {
	// 定义并初始化两个数组
	int nums1[] = { 1, 2, 2, 1 };
	int nums2[] = { 2, 2 };
	int nums1Size = sizeof(nums1) / sizeof(nums1[0]);
	int nums2Size = sizeof(nums2) / sizeof(nums2[0]);
	int returnSize;

	// 调用findIntersectionValues函数
	int* intersection = findIntersectionValues(nums1, nums1Size, nums2, nums2Size, &returnSize);

	// 打印结果
	printf("Intersection counts: nums1 in nums2: %d, nums2 in nums1: %d\n", intersection[0], intersection[1]);

	// 释放分配的内存
	free(intersection);
	return 0;
}

              这道题整体思路比较简单更多的是对题干信息的理解。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 20:22:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 20:22:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 20:22:03       58 阅读
  4. Python语言-面向对象

    2024-07-17 20:22:03       69 阅读

热门阅读

  1. 前端面试题日常练-day94 【Less】

    2024-07-17 20:22:03       23 阅读
  2. Linux第一章课后作业

    2024-07-17 20:22:03       25 阅读
  3. 免费服务器和付费服务器哪个更好?

    2024-07-17 20:22:03       23 阅读
  4. 云服务器,nginx访问失败,安全组,0.0.0.0/0

    2024-07-17 20:22:03       22 阅读
  5. 网络安全工作者如何解决网络拥堵

    2024-07-17 20:22:03       21 阅读
  6. docker network(docker网络)介绍

    2024-07-17 20:22:03       23 阅读
  7. 【C语言】条件运算符详解 - 《 A ? B : C 》

    2024-07-17 20:22:03       26 阅读