C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】

1. 题目描述

力扣在线OJ题目

给定两个数组,编写一个函数来计算它们的交集。

示例:

输入:nums1 = 1,2,2,1, nums2 = 2,2

输出:2

输入:nums1 = 4,9,5, nums2 = 9,4,9,8,4

输出:9,4

2. 思路

直接暴力求解。将 nums1 数组中的每一个数字,判断是否存在于 nums2 数组中,通过这种方式找出交集数据,找出之后判断这个数组是否已经在返回数组中存在,不存在则添加到返回数组中即可。

3. 代码实现

c 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size,
                  int* returnSize) {
    static int arr[1000];
    *returnSize = 0;
    int i, j, k;
    for (i = 0; i < nums1Size; i++) {
        for (j = 0; j < nums2Size; j++) {
            if (nums2[j] == nums1[i])
                break; // 判断nums1[i] 是否在nums2数组中
        }
        if (j == nums2Size) { // nums1中i位置的数据在nums2数组中不存在,则非交集数据
            continue;
        }
        // 只有在另一个数组中存在的数据才能走下来,判断是否已经被添加到返回数组中
        for (j = 0; j < *returnSize; j++) {
            if (nums1[i] == arr[j])
                break; // 判断nums1[i] 是否在 arr 这个返回数组中
        }
        if (j == *returnSize) { // 不在返回数组中,则添加到返回数组中
            arr[*returnSize] = nums1[i];
            *returnSize += 1;
        }
    }
    return arr;
}
相关推荐
小灰灰搞电子1 小时前
C语言 <time.h> 头文件详解
c语言·time.h
C++ 老炮儿的技术栈2 小时前
sizeof操作符
c语言·c++·人工智能·mfc·c
wuminyu3 小时前
ForkJoinPool内部WorkQueue的Lock-Free数组操作以及并发任务窃取原理剖析
java·linux·c语言·jvm·c++
code2cat3 小时前
Java进阶篇之AtomicMarkableReference:引用还在,标记已经改变
java·开发语言·cas·并发编程·逻辑删除
CappuccinoRose3 小时前
FormData数据处理
开发语言·前端·javascript·表单数据
她说彩礼65万3 小时前
C语言 堆区和栈区
java·linux·c语言
Zguigo3 小时前
【CUDA8】第一个CUDA C++ Kernel --vector add
java·开发语言·c++
-Marks-4 小时前
【C++编程】STL容器(二)--- vector底层模拟实现(常用接口实现 | 扩容机制 | 深浅拷贝 | 迭代器失效)
开发语言·c++·vector·内存管理·迭代器失效·vector底层模拟实现
Shadow(⊙o⊙)4 小时前
C++11并发支持库
开发语言·c++
一技安身4 小时前
【java】JDK8 + JDK17 绿色解压共存方案-全程不修改任何系统环境变量
java·开发语言