LeetCode //C - 349. Intersection of Two Arrays

349. Intersection of Two Arrays

Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must be unique and you may return the result in any order.
 

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2]

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [9,4]
Explanation: [4,9] is also accepted.

Constraints:
  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

From: LeetCode
Link: 349. Intersection of Two Arrays


Solution:

Ideas:

1. exists function: This helper function checks whether a value is present in a given array. This ensures that only unique elements are added to the result array.

2. intersection function:

  • We allocate memory for the result array, using the smaller size between nums1Size and nums2Size since the intersection can’t be larger than the smaller array.
  • For each element in nums1, we check if it exists in nums2 and if it hasn’t already been added to the result.
  • The returnSize is updated with the number of unique elements in the intersection.
Code:
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
// Function to check if an element exists in the array
bool exists(int* arr, int size, int value) {
    for (int i = 0; i < size; i++) {
        if (arr[i] == value) {
            return true;
        }
    }
    return false;
}

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
    // We allocate the maximum possible size for the result, which is the smaller of nums1Size and nums2Size
    int* result = (int*)malloc(sizeof(int) * (nums1Size < nums2Size ? nums1Size : nums2Size));
    int resIndex = 0;

    // Loop through nums1 and check if the element exists in nums2 and hasn't been added yet
    for (int i = 0; i < nums1Size; i++) {
        if (exists(nums2, nums2Size, nums1[i]) && !exists(result, resIndex, nums1[i])) {
            result[resIndex++] = nums1[i];
        }
    }

    *returnSize = resIndex;  // Set the return size
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Navigator_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值