题目: 给定两个数组,编写一个函数来计算它们的交集.(来自 leecode(349) )
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]
说明:
我的解法:
题目同上,只不过在输出的时候
输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4]
解法
如果给定的数组是排好序的,
arr1 = [1,2,3,4,4,13],arr2 = [1,2,3,9,10]
那这个返回值该如何获取得两个数组的交集呢?
解法
百位数有4种选择,为与百位数不重复,十位数就只有3种选择了;同样道理,个位数就只有2种选择。所以1、2、3、4等4个数字能组成4x3x2共24种互不相等且没有重复数字的3位数。根据上述原理,可用一个3层嵌套for循环来完成,代码如下:
#include "stdio.h"
int main(int argc,char *argv[]){
int i,j,k,t
printf("A total of %d no repeat number 3-digits, they are as follows:\n",4*3*2)
for(t=0,i=1i<=4i++)//百位数字有4种选择
for(j=1j<=4j++)//十位数字有3种选择
if(j!=i)//遇到十位数字等于百位数字时跳过
for(k=1k<=4k++)//个位数字只有2种选择了
if(k!=i && k!=j)//个位数字与十位或百位数字相等时跳过
printf(++t%10 ? "%4d" : "%4d\n",i*100+j*10+k)//输出该三位数
if(t%10)
printf("\n")
return 0
}
扩展资料
#include<stdio.h>
main()
{
int i, j, k
int m=0
for(i=1i<5i++)
for(j=1j<5j++)
for(k=1k<5k++)
{
if(i!=j&&k!=j&&i!=k)
{
printf("%d%d%d\n",i,j,k)
m++
}
}
printf("%d\n",m)
getch()
}