您的目标是计算两个整数列表的集合相交。相交定义为在两个输入列表中至少发现一次的唯一无序整数组。
输入项
输入可以是所需的任何格式(功能参数,标准输入输出等),并且由两个整数列表组成。除了可能包含任何非负数的整数(即它们未排序,可能包含重复项,可能具有不同长度,甚至可能为空)之外,您可能不假设有关每个列表的任何内容。假定每个整数都适合您语言的本机带符号整数类型,长度可能超过1个十进制数字,并且已签名。
输入示例:
1 4 3 9 8 8 3 7 0
10 1 4 4 8 -1
输出量
输出是任何类似于列表的整数,代表将两个列表的交集设置为所需的任何格式(返回值,stdio等)。尽管欢迎您提供恰好总是被排序的实现,但是并不需要对输出进行排序。输出必须形成有效的无序集合(例如,它不得包含任何重复值)。
测试用例示例(请注意,输出顺序并不重要):
前两行是输入列表,第三行是输出。(empty)
表示空白列表。
(empty)
(empty)
(empty)
1000
(empty)
(empty)
3 1 2 4 3 1 1 1 1 3
3 1 -1 0 8 3 3 1
1 3
1 2 1
3 3 4
(empty)
计分
这是代码高尔夫;以字节为单位的最短答案获胜。
禁止使用标准孔。您可以使用并非为类似集合的操作设计的任何内置功能。
禁止的内置功能:
- 设置创建/删除重复项
- 设置差异/交叉点/联合
- 通用成员资格测试(例如,类似于
in
Python中的关键字,类似indexOf
函数的任何东西)。请注意,尽管Python重用了in
关键字来创建此构造,但仍允许使用“列表中的foreach项”构造(假定它们不违反任何其他限制)。 - 这些禁止的内置程序是“病毒”的,即,如果有更大的内置程序包含这些子功能中的任何一个,则同样会被禁止(例如,按列表中的成员资格进行过滤)。
上面列表中没有的任何内置函数都是允许的(例如排序,整数相等性测试,列表按索引附加/删除,过滤等)。
例如,采用以下两个示例片段(类似于Python的代码):
# prohibited: filters by testing if each value in tmpList is a member of listA
result = tmpList.filter(listA)
# ok: filtering by a lambda which manually iterates over listA and checks for equality
def my_in_func(val, slist):
for a in slist:
if(val == a):
return True
return False
result = filter(lambda v: my_in_func(val, listA), tmpList)
欢迎您自己实现这些类似集合的功能,它们将计入您的分数。
您的解决方案应在合理的时间内完成(例如,对于拥有两个列表(每个长度为1000)的任何硬件,用不到一分钟的时间)。