Python 面经系列之笔试题

金九银十即将来临,整理了一份某手、某行的笔试题,如有更优解法,欢迎交流

题一:
实现一个函数,参数是一个字符串,一个是子串长度。返回要求符合长度的子串出现最多次数的子串以及出现次数,如果最多出现次数有多个子串,都输出。
例如:
输入:
allstr = 'ababbcbcbccdcdcd ’
sublen = 2
输出 :
最大出现次数为3,
子串为[“bc”, “cd”]

allstr = 'ababbcbcbccdcdcd '

def findit(allstr, sublen):
    allstr = allstr.strip()
    cut_allstr = [allstr[i:i+sublen] for i in range(0,len(allstr),sublen)]
    dic = {}
    for i in cut_allstr:
        if i not in dic.keys():
            dic[i] = cut_allstr.count(i)
    r = list(dic.values())
    c = max(r,key=r.count)
    ks=[k for k,v in dic.items() if v==c]
    print(f'最大出现次数为:{c}')
    print(f'子串是: {ks}')

findit(allstr,2)

题二
实现一个斐波那契数列,请用2种不同方法,并分析时间复杂度,及算法性能

def fib(n):
    """
    递归实现
    时间复杂度O(2^n)
    求解F(n),必须先计算F(n-1)和F(n-2),计算F(n-1)和F(n-2),又必须先计算F(n-3)和F(n-4)...
    以此类推,直至必须先计算F(1)和F(0),然后逆推得到F(n-1)和F(n-2)的结果,
    从而得到F(n)要计算很多重复的值,在时间上造成了很大的浪费,
    算法的时间复杂度随着N的增大呈现指数增长,时间的复杂度为O(2^n),即2的n次方 
    【注】递归深度报错及处理
    """
    if n<=2: return 1
    return fib(n-1)+fib(n-2)


def fib(number):
    """
    生产器实现
    时间复杂度为O(n)
    效率比递归算法快得多,算法的时间复杂度与n成正比
    """
    n,a,b = 0, 1, 1
    while n < number:
        yield a
        a, b = b, a + b
        n += 1

题三
统计各个部分工资记录数
部门表departments简况如下

dept_nodept_name
d001Finace
d002Jack

部门员工关系表dept_emp简况如下

emp_nodept_nofrom_dateto_date
10001d0012001-06-229999-01-01
10002d0021996-08-039999-01-01
10003d0031997-06-219999-01-01

薪水表salaries简况如下

emp_nosalaryfrom_dateto_date
10001860972001-06-229999-01-01
10001889072001-06-229999-01-01
10002776851996-08-039999-01-01
10003556751997-06-219999-01-01

请你统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum,按照dept_no升序排序,以上例子输出如下:

dept_nodept_namesum
d001Finace3
d002Jack1
SELECT d.dept_no, d.dept_name, count(s.salary) AS SUM
FROM departments d JOIN dept_emp de ON d.dept_no = de.dept_no
JOIN salaries s ON de.emp_no = s.emp_no
GROUP BY d.dept_no
ORDER BY d.dept_no ASC
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值