求解整数集合的交集(腾讯笔试)
问题描述:
A,B两个整数集合,设计一个算法求他们的交集,尽可能高效。
问题分析:
用哈希表,遍历集合A,构造一个哈希表,在遍历集合B,从哈希表中查询,如果存在即保存该元素。
时间复杂度O(n+m) (n,m分别是A,B集合长度)
Python求解查找出现一次字符问题(2016奇虎笔试题)
Python实现(用到了内置函数字典dict)
def combine(li1,li2): d = dict() for ch in li1: d[ch] = d.get(ch,1) chs = [c for c in li2 if d.get(c) != None] return chs
测试样例:
l1 = [1,2,3,4,5,9,8] l2 = [2,3,7,8,9,10] print(combine(l1,l2))
输出结果:
[2, 3, 8, 9]
下面是2016奇虎笔试题,用的是相同方法(字典dict)解决
题目描述:
在给定的字符串,找出其中只出现一次的字符,如果有多个这样的字符,就全部找出来
注意字典dict()的get用法
Python实现
def search(s): d = dict() for ch in s: #如果这个自出出现过 则加1 #如果这个字符第一次出现,0+1 d[ch] = d.get(ch,0) + 1 chs = [ch for ch,n in d.items() if n==1] return chs
测试样例
arrays = 'asdfghvnjtryuisdgfsbcbvnp' arrays2 = 'ddfgewrweytrbbnytruetreczplo' print(search(arrays)) print(search(arrays2))
输出:
['y', 'h', 't', 'r', 'p', 'j', 'c', 'i', 'a', 'u']
['l', 'c', 'g', 'f', 'p', 'o', 'z', 'n', 'u']