记录9.28笔试
题目是英文,大致意思是:在一个词队列中找出,出现次数最多的词。
语言
Python3.6
笔试记录
import time
def sss(L,K):
a = [] # 存放word的种类
b = [] # word对应的个数
while len(L)!=0:# 每次迭代都会删除一类word,直到词队列为空。
a.append(L[0])
flag = L[0]
num = 0
k = len(L)
j = 0
for i in range(k):#删除一类word,并统计个数
if flag == L[j]:
L.remove(L[j])
num = num + 1
j = j-1
j = j+1
b.append(num)
x = len(b)
if x>1 and b[x-1]<b[x-2]:#顺便保证出现次数最多的word始终在最后。
y = b[x-1]
b[x-1] = b[x-2]
b[x-2] = y
z = a[x-1]
a[x-1] = a[x-2]
a[x-2] = z
print(a)
print(b)
L = ['I','like','Python','h','h','I','I']
print('原数据',L)
start = time.clock()
sss(L,7)
end = time.clock()
print(end-start)
笔试后思考。。。
改善
def ss(L):
mm = {}
for i in range(len(L)):
if L[i] in mm:
mm[L[i]] = mm[L[i]]+1
else:
mm.update({L[i]:1})
max = 0
for i in mm.values():
if i > max:
max = i
x = []
for j,k in mm.items():
if max == k:
x.append(j)
return x
L = ['I','like','Python','h','h','I','I','h']
start = time.clock()
print(ss(L))
end = time.clock()
print(end - start)
使用Python里面的字典,对比两种算法,计算时间
显然第二种算法(O(n))的时间复杂度要比第一种好的多。