350.两个数组的交集II

题目

【学习计划 - 数据结构 - 第二天 - 数组】https://leetcode-cn.com/study-plan/data-structures/

https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/

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

程序样例

1
2
3
4
5
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
}

我的解答

第一版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
int *numsL,LSize,*numsS,SSize;
if(nums1Size > nums2Size){
numsL = nums1;
LSize = nums1Size;
numsS = nums2;
SSize = nums2Size;
}else{
numsL = nums2;
LSize = nums2Size;
numsS = nums1;
SSize = nums1Size;
}

int i=0,j=0;
while(i<LSize && j<SSize){
if( *(numsL+i)==*(numsS+j) ){
i++;
j++;
}else{
i = i-j+1;
j=0;
}
}
int* res;
if(j==SSize){
*returnSize = j;

//res = numsS;

res = (int *)malloc( sizeof(int)*(*returnSize) );
// j:匹配成功,短数组的长度
//i-j:匹配成功,左端点在长数组的下标位置
// i-1:匹配成功,右端点在长数组的下标位置
for(int index = i-j; index <= i-1; index++){
res[index-i+j] = numsL[index];
}

}else{
*returnSize = 0;
}
return res;
}

第一版本思路:先找到长数组和短数组,长数组不变,短数组跟长数组比较,看长数组是否有子串与短数组一样,如果有,找到在长数组中对于子串的两端下标。用新数组,根据子串两端下标,赋值新数组。

结果:功能不完全