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