Python面试题大全(五):测试、大数据、数据结构(2)

222.数组中出现次数超过一半的数字-Python版

223.求100以内的质数

224.无重复字符的最长子串-Python实现

225.通过2个5/6升得水壶从池塘得到3升水

226.什么是MD5加密,有什么特点?

227.什么是对称加密和非对称加密

228.冒泡排序的思想?

229.快速排序的思想?

230.如何判断单向链表中是否有环?

231.你知道哪些排序算法(一般是通过问题考算法)

232.斐波那契数列

**数列定义: **

f 0 = f 1 = 1 f n = f (n-1) + f (n-2)

根据定义

速度很慢,另外(暴栈注意!⚠️️) O(fibonacci n)

def fibonacci(n):

if n == 0 or n == 1:

return 1

return fibonacci(n - 1) + fibonacci(n - 2)

线性时间的

状态/循环

def fibonacci(n):

a, b = 1, 1

for _ in range(n):

a, b = b, a + b

return a

递归

def fibonacci(n):

def fib(n_, s):

if n_ == 0:

return s[0]

a, b = s

return fib(n_ - 1, (b, a + b))

return fib(n, (1, 1))

map(zipwith)

def fibs():

yield 1

fibs_ = fibs()

yield next(fibs_)

fibs__ = fibs()

for fib in map(lambad a, b: a + b, fibs_, fibs__):

yield fib

def fibonacci(n):

fibs_ = fibs()

for _ in range(n):

next(fibs_)

return next(fibs)

Logarithmic

矩阵

import numpy as np

def fibonacci(n):

return (np.matrix([[0, 1], [1, 1]]) ** n)[1, 1]

不是矩阵

def fibonacci(n):

def fib(n):

if n == 0:

return (1, 1)

elif n == 1:

return (1, 2)

a, b = fib(n // 2 - 1)

c = a + b

if n % 2 == 0:

return (a * a + b * b, c * c - a * a)

return (c * c - a * a, b * b + c * c)

return fib(n)[0]

233.如何翻转一个单链表?

class Node:

def init(self,data=None,next=None):

self.data = data

self.next = next

def rev(link):

pre = link

cur = link.next

pre.next = None

while cur:

temp = cur.next

cur.next = pre

pre = cur

cur = tmp

return pre

if name == ‘main’:

link = Node(1,Node(2,Node(3,Node(4,Node(5,Node(6,Node7,Node(8.Node(9))))))))

root = rev(link)

while root:

print(roo.data)

root = root.next

234.青蛙跳台阶问题

一只青蛙要跳上n层高的台阶,一次能跳一级,也可以跳两级,请问这只青蛙有多少种跳上这个n层台阶的方法?

方法1:递归

设青蛙跳上n级台阶有f(n)种方法,把这n种方法分为两大类,第一种最后一次跳了一级台阶,这类共有f(n-1)种,第二种最后一次跳了两级台阶,这种方法共有f(n-2)种,则得出递推公式f(n)=f(n-1) + f(n-2),显然f(1)=1,f(2)=2,这种方法虽然代码简单,但效率低,会超出时间上限

class Solution:

def climbStairs(self,n):

if n ==1:

return 1

elif n==2:

return 2

else:

return self.climbStairs(n-1) + self.climbStairs(n-2)

方法2:用循环来代替递归

class Solution:

def climbStairs(self,n):

if n1 or n2:

return n

a,b,c = 1,2,3

for i in range(3,n+1):

c = a+b

a = b

b = c

return c

235.两数之和 Two Sum

236.搜索旋转排序数组 Search in Rotated Sorted Array

237.Python实现一个Stack的数据结构

238.写一个二分查找

239.set 用 in 时间复杂度是多少,为什么?

240.列表中有n个正整数范围在[0,1000],进行排序;

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

240.列表中有n个正整数范围在[0,1000],进行排序;

[外链图片转存中…(img-wdo8FPja-1714419201847)]
[外链图片转存中…(img-PUNcWjDu-1714419201847)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值