代码随想录一刷——350.两个数组的交集II
用双指针法
C:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int cmp(const int* a,const int* b)
{
return *a==*b ? 0 : *a > *b ? 1 : -1;
}
int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
/*
-
函数功能:
qsort
是 C 语言标准库中的快速排序函数,用于对给定的数组进行排序。- 它可以对任意类型的数据进行排序,只要提供合适的比较函数。
-
函数参数:
- 第一个参数是要排序的数组的首地址。在这段代码中,分别是
nums1
和nums2
,即两个整数数组的首地址。 - 第二个参数是数组中元素的个数。这里分别是
nums1Size
和nums2Size
。 - 第三个参数是每个数组元素的大小,以字节为单位。由于这里是整数数组,所以是
sizeof(int)
。 - 第四个参数是一个指向比较函数的指针。在这段代码中,传入了自定义的比较函数
cmp
。
- 第一个参数是要排序的数组的首地址。在这段代码中,分别是
*/
qsort(nums1,nums1Size,sizeof(int),cmp);
qsort(nums2,nums2Size,sizeof(int),cmp);
*returnSize = 0;
int min = 0;
//min = nums1Size > nums2Size ? nums2Size : nums1Size < nums2Size ? nums1Size : nums1Size;
//int* result = (int*)malloc(sizeof(int)*min);
int* result = (int*)malloc(sizeof(int)*fmin(nums1Size,nums2Size));
int index1 = 0;
int index2 = 0;
while(index1 < nums1Size && index2 < nums2Size)
{
if(nums1[index1]<nums2[index2])
{
index1++;
}
else if(nums1[index1]>nums2[index2])
{
index2++;
}
else
{
result[(*returnSize)++] = nums1[index1];
index1++;
index2++;
}
}
return result;
}
Python:
class Solution(object):
def intersect(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
nums1.sort()
nums2.sort()
res = list()
len1 = len(nums1)
len2 = len(nums2)
index1=index2=0
while index1<len1 and index2 < len2:
if nums1[index1]<nums2[index2]:
index1 +=1
elif nums1[index1] > nums2[index2]:
index2+=1
else:
res.append(nums1[index1])
index1+=1
index2+=1
return res
C++:
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2)
{
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int index1 = 0;
int index2 = 0;
vector<int> res;
while(index1<nums1.size() && index2<nums2.size())
{
if(nums1[index1] < nums2[index2])
index1++;
else if(nums1[index1] > nums2[index2])
index2++;
else
{
res.push_back(nums1[index1]);
index1++;
index2++;
}
}
return res;
}
};