题目描述
分析
其中一种逻辑比较清晰的方法就是分别对两个数组进行排序,再应用二路归并排序的思想来找出交集。下面是实现的代码,其中采用的排序方法是选择排序。代码实现
void SelectSort(int *nums,int numsSize){
int min,temp;
for(int i=0;i<numsSize-1;i++){
min=i;
for(int j=i+1;j<numsSize;j++){
if(nums[min]>nums[j]){
min=j;
}
}
if(min!=i){
temp=nums[min];
nums[min]=nums[i];
nums[i]=temp;
}
}
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
int temp,i,j;
int *result=(int *)malloc(nums2Size*sizeof(int));
//选择排序
SelectSort(nums1,nums1Size);
SelectSort(nums2,nums2Size);
*returnSize=0;
temp=nums1[nums1Size-1]+1; //给temp赋一个不可能与nums1或nums2冲突的值
for(i=0,j=0;i<nums1Size&&j<nums2Size;){
if(nums1[i]>nums2[j]){
j++;
}
else if(nums1[i]<nums2[j]){
i++;
}
else{
if(temp!=nums1[i]){
result[(*returnSize)++]=nums1[i];
temp=nums1[i];
}
i++;
j++;
}
}
return result;
}