求解整数集合的交集(腾讯笔试)

问题描述:

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']

 

posted @ 2017-03-01 12:17  lateink  阅读(662)  评论(0编辑  收藏  举报