牛客腾讯笔试题真题题解
- 格雷码
# -*- coding:utf-8 -*-
class GrayCode:
def getGray(self, n):
GrayList = []
tmp_list_0, tmp_list_1 = [],[]
if n <1 :
return None
elif n == 1:
GrayList = ['0','1']
return GrayList
else:
Prev_list = self.getGray(n-1)
for idx, item in enumerate(Prev_list):
tmp_list_0.append('0'+str(item))
tmp_list_1.insert(0,'1'+str(item))
GrayList = tmp_list_0+tmp_list_1
return GrayList
思路:用递归的思路去解决。找规律,当n大于1的时候,新的GrayCode是n-1时候的GrayCode前+0与+1后的列表倒序concat。
编程细节:在python的类中,在类内部递归需要用self.getGray不然会报错。
- 微信红包
题目描述
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。
若没有金额超过总数的一半,返回0。
测试样例:
[1,2,3,2,2],5
返回:2
# -*- coding:utf-8 -*-
class Gift:
def getValue(self, gifts, n):
count = [gifts.count(gift) for gift in gifts]
return gifts[count.index(max(count))] if max(count)>n/2 else
一行写法
from collections import Counter
class Gift:
def getValue(self, gifts, n):
a = Counter(