面试笔试记录--在词队列中找出现次数最频繁的词(Python)

记录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))的时间复杂度要比第一种好的多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值