当前位置: 首页 > ds >正文

Python技术题2

1.技术面试题

(1)详细描述单调栈的工作原理和应用场景

答:单调栈是一种特殊的栈数据结构,其核心特性是栈内元素始终保持单调递增或单调递减的顺序。

工作原理:遍历数据时,通过比较当前元素与栈顶元素的大小关系,维护栈的单调性。 若当前元素破坏单调性,则弹出栈顶元素,直到栈重新满足单调性后,再将当前元素入栈。 弹出元素时,可根据需求记录其相关信息(如第一个更大 / 更小元素的位置)。

应用场景:求解数组中每个元素的「下一个更大元素」或「上一个更小元素」(时间复杂度 O (n))。 处理直方图中最大矩形面积问题。 解决接雨水问题(计算每个位置能承接的雨水量)。 单调栈在链表、字符串等场景中也有应用,例如寻找最长递增子序列的优化解法。

(2)详细描述单调队列的工作原理和应用场景

答:单调队列是一种保持队列内元素单调递增或单调递减的队列结构,兼具队列的先进先出特性和单调性。

工作原理:插入元素时,若当前元素破坏队列单调性,则从队尾弹出元素,直到队列满足单调性后再插入新元素。 队列头部通常是当前窗口内的最大 / 最小值,可直接获取。 若队列头部元素超出当前处理范围(如滑动窗口问题),则从队头弹出。

应用场景:滑动窗口最大值 / 最小值问题(时间复杂度 O (n))。 求解数组中区间的最大 / 最小值相关问题。 在动态规划中优化状态转移,例如某些需要维护区间极值的场景。 单调队列也可用于处理数据流中的实时极值问题。

2.HR面试题

(1)如果竞争对手用双倍薪资挖你,你会怎么选择?

答:薪资确实是职业选择的重要因素,但我更看重公司的发展平台、团队氛围和个人成长空间。贵公司在 [行业领域] 的优势和发展前景是我非常认可的,而且我在目前的团队中能接触到 [具体项目 / 技术],这与我的职业规划高度匹配。如果遇到这种情况,我会理性分析背后的原因,但不会仅仅因为薪资翻倍就轻易改变选择,毕竟长期的职业发展比短期的薪资提升更重要。

(2)我们觉得你今天表现一般,不符合岗位要求,你有什么想说的?

答:非常感谢您的反馈。虽然这个结果让我有些遗憾,但我尊重贵公司的判断。今天的表现可能确实有不足之处,这也让我意识到自己需要在 [相关领域] 进一步提升。如果方便的话,希望能得到更具体的改进建议,帮助我未来更好地成长。无论结果如何,我依然非常认可贵公司的理念,也希望未来有机会再次参与贵公司的招聘。

3.选择题

(1)在Python中,以下哪个不是循环控制语句?

A. break B. continue C. pass D. return

答:D

(2)以下代码的输出结果是什么?

for i in range(5):if i == 3:continueprint(i, end=' ')

A. 0 1 2 3 4 B. 0 1 2 4 C. 0 1 2 D. 3

答:B

(3)完成以下代码,使其能够打印出1到100之间所有的偶数:

for i in range(1, 101):if ______:print(i, end=' ')

A. i % 2 == 0 B. i % 2 == 1 C. i / 2 == 0 D. i // 2 == 0

答:A

(4)以下代码有一个错误,导致它无法正确计算1到10的和。请选择正确的修改方案:

sum = 0
i = 1
while i < 10:sum += ii += 1
print(sum)

A. 将i < 10改为i <= 10 B. 将i += 1改为i += 2 C. 将sum += i改为sum = sum + i + 1 D. 将i = 1改为i = 0

答:A

(5)以下代码的输出结果是什么?

for i in range(3):for j in range(2):print(f"({i},{j})", end=' ')

A. (0,0) (0,1) (1,0) (1,1) (2,0) (2,1) B. (0,0) (1,0) (2,0) (0,1) (1,1) (2,1) C. (0,0) (0,1) (0,2) (1,0) (1,1) (1,2) D. (0,0) (1,1) (2,2)

答:A

(6)完成以下代码,使其能够打印出斐波那契数列的前10个数:

a, b = 0, 1
for _ in range(10):print(a, end=' ')______

A. a, b = b, a + b B. a, b = a + b, b C. a, b = b, a D. a, b = a + 1, b + 1

答:A

(7)以下代码的输出结果是什么?

i = 0
while i < 5:i += 1if i == 3:continueprint(i, end=' ')
else:print("Done")

A. 1 2 3 4 5 Done B. 1 2 4 5 Done C. 1 2 4 5 D. 1 2 Done

答:B

(8)以下代码的输出结果是什么?

for i in range(1, 5):for j in range(1, 5):if i * j > 10:breakprint(f"{i}*{j}={i*j}", end=" ")print()

A.

1*1=1 1*2=2 1*3=3 1*4=4 
2*1=2 2*2=4 2*3=6 2*4=8 
3*1=3 3*2=6 3*3=9 3*4=12 
4*1=4 4*2=8 4*3=12 4*4=16 

B.

1*1=1 1*2=2 1*3=3 1*4=4 
2*1=2 2*2=4 2*3=6 2*4=8 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 

C.

1*1=1 1*2=2 1*3=3 1*4=4 
2*1=2 2*2=4 2*3=6 2*4=8 
3*1=3 3*2=6 3*3=9 

D.

1*1=1 1*2=2 1*3=3 1*4=4 
2*1=2 2*2=4 2*3=6 2*4=8 

答:B

(9)以下代码的输出结果是什么?

for i in range(4):for j in range(4):if (i + j) % 2 == 0:print("*", end="")else:print("#", end="")print()

A.

****
####
****
####

B.

*#*#
#*#*
*#*#
#*#*

C.

*#*#
*#*#
*#*#
*#*#

D.

****
****
****
****

答:B

(10)以下代码的输出结果是什么?

count = 0
for i in range(1, 5):for j in range(1, 5):for k in range(1, 5):if i != j and j != k and i != k:count += 1
print(count)

A. 24 B. 36 C. 60 D. 64

答:A

4.问答题

(1)Python中有哪几种基本的循环结构?请简要说明它们的语法和适用场景。

答:Python 中有两种基本的循环结构:

1.for 循环 语法:for 变量 in 可迭代对象: 循环体 适用场景:用于遍历可迭代对象(如列表、字符串、range 对象等),循环次数由可迭代对象的长度决定。例如遍历列表元素、执行固定次数的循环(结合 range () 函数)。 2.while 循环 语法:while 条件表达式: 循环体 适用场景:当循环次数不确定,且需要根据条件判断是否继续循环时使用。例如等待用户输入正确值、处理动态生成的数据直到满足退出条件等。

(2)Python中有哪些循环控制语句?它们各自的作用是什么?请给出示例说明。

答:Python 中的循环控制语句包括:

1.break 作用:立即终止当前循环,跳出循环体,执行循环外的后续代码。 示例: for i in range(5): if i == 3: break print(i) # 输出:0 1 2

2.continue 作用:跳过当前循环的剩余语句,直接进入下一次循环。 示例: for i in range(5): if i == 3: continue print(i) # 输出:0 1 2 4

3.else(与循环搭配) 作用:若循环正常结束(未被 break 终止),则执行 else 块中的代码。 示例: for i in range(3): print(i) else: print("循环正常结束") # 输出:0 1 2 循环正常结束

4.pass 作用:空语句,用于占位,不执行任何操作,避免语法错误。 示例: for i in range(5): if i % 2 == 0: pass # 暂不处理偶数 else: print(i) # 输出:1 3

(3)在Python的for循环中,range()函数扮演着重要角色。请详细说明range()函数的语法、参数含义和使用方法,并给出至少3个不同用法的示例。

答:range () 函数用于生成一个整数序列,语法为:range(start, stop, step)

参数含义: start:起始值(可选,默认 0)。 stop:终止值(必选),生成的序列不包含 stop。 step:步长(可选,默认 1),若为负数则表示反向生成序列(需满足 start > stop)。 示例: 1.单参数(stop):生成 0 到 stop-1 的序列 for i in range(5): print(i, end=' ') # 输出:0 1 2 3 4

2.双参数(start, stop):生成 start 到 stop-1 的序列 for i in range(2, 7): print(i, end=' ') # 输出:2 3 4 5 6

3.三参数(start, stop, step):指定步长生成序列 for i in range(1, 10, 2): print(i, end=' ') # 输出:1 3 5 7 9

4.反向序列(step 为负数): for i in range(5, 0, -1): print(i, end=' ') # 输出:5 4 3 2 1

(4)什么是嵌套循环?请解释嵌套循环的工作原理。

答:嵌套循环是指在一个循环体内包含另一个完整的循环结构。外层循环和内层循环可以是 for 循环或 while 循环的任意组合。

工作原理: 外层循环执行一次,内层循环会完整执行所有次数。 内层循环结束后,外层循环进入下一次迭代,重复上述过程,直到外层循环结束。

例如,外层循环控制行数,内层循环控制每行的列数,常用于打印矩阵、九九乘法表等二维结构。

(5)编写代码,判断两个矩形的关系

题目描述

判断两个矩形之间的关系:包含,重叠,相离

image-20250304171517426

输入输出描述

输入两行,每行四个数据,分别是矩形的中心坐标x、y和矩形的宽、高

输出两者的关系

示例1

输入:

2.5 4 2.5 43

1.5 5 0.5 3

输出:

包含

示例2

输入:

1 2 3 5.5

3 4 4.5 5

输出:

重叠

示例3

输入:

1 2 3 3

40 45 3 2

输出:

相离

答:

x1, y1, w1, h1 = map(float, input().split())
x2, y2, w2, h2 = map(float, input().spliT())
left1 = x1 - w1 / 2
right1 = x1 + w1 / 2
bottom1 = y1 - h1 / 2
top1 = y1 + h1 / 2
left2 = x2 - w2 / 2
right2 = x2 + w2 / 2
bottom2 = y2 - h2 / 2
top2 = y2 + h2 / 2
​
def is_contains(a_left, a_right, a_bottom, a_top, b_left, b_right, b_bottom, b_top):return (a_left <= b_left and a_right >= b_right anda_bottom <= b_bottom and a_top >= b_top)
​
contains1 = is_contains(left1, right1, bottom1, top1, left2, right2, bottom2, top2)
contains2 = is_contains(left2, right2, bottom2, top2, left1, right1, bottom1, top1)
​
if contains1 or contains2:print("包含")
else:# 判断相离(不重叠)if (right1 < left2 or right2 < left1 ortop1 < bottom2 or top2 < bottom1):print("相离")else:print("重叠")

(6)编写代码,打印如下数字图案

11   2   11   2   4   2   11   2   4   8   4   2   11   2   4   8   16  8   4   2   11   2   4   8   16  32  16  8   4   2   1
1   2   4   8   16  32  64  32  16  8   4   2   1

答:

or i in range(7): print(" " * (6 - i), end="") left = [2 **j for j in range(i + 1)] right = left[-2::-1] if i > 0 else [] row = left + right print("\t".join(map(str, row)))

(7)编写代码,打印如下星星图案

****************
*************************

答:for i in range(5): print(" " * (4 - i) + "*" * (2 * i + 1))

for i in range(3, -1, -1): print(" " * (4 - i) + "*" * (2 * i + 1))

(8)编写代码,求最小公倍数

题目描述

输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15

输入输出描述

输入两个正整数

输出最小公倍数

示例1

输入:

3 9

输出:

9

示例2

输入:

4 6

输出:

12

答:

def gcd(a, b):

    while b != 0:

        a, b = b, a % b

    return a

a, b = map(int, input().split())

lcm = a * b // gcd(a, b)

print(lcm)

http://www.xdnf.cn/news/15961.html

相关文章:

  • 工程图矢量化 笔记 | potrace ezdxf svgpathtools | png转svg保存dxf用matplotlib画出来
  • 如何构建未来的人-AI-环境智能教育生态系统
  • 线性回归问题
  • xss的利用
  • 《YOLOv13魔术师专栏》全景指南:从理论到工业级实战
  • ICT测试原理之--什么是假短
  • JavaSE-接口
  • Android14 SystemUI 启动流程(2)
  • 笔试大题20分值(用两个栈实现队列)
  • Unity物理响应函数与触发器
  • C++类和对象(一)基础内容讲解
  • 2025暑假训练树状数组
  • 自动化立体仓库堆垛机控制系统上报堆垛机状态 FC5
  • MySQL 写入性能优化全攻略(附 GitHub 面试题项目链接)
  • 最终分配算法【论文材料】
  • laravel RedisException: Connection refused优雅草PMS项目管理系统报错解决-以及Redis 详细指南-优雅草卓伊凡
  • WSL的功能及用途
  • JavaScript空值安全深度指南
  • 单调队列深度解析(下)
  • 前端开发技巧:浏览器模拟弱网络环境
  • 【Linux】重生之从零开始学习运维之Nginx
  • 高可用架构设计与实践综述
  • XSS总结
  • 【RK3576】【Android14】固件烧录
  • 零基础学后端-PHP语言(第一期-PHP环境配置)
  • SQL核心语法与实战应用指南
  • MacOS:如何利用终端来操作用户
  • kafka--基础知识点--6.1--LEO、HW、LW
  • 2025 Data Whale x PyTorch 安装学习笔记(Windows 版)
  • react+antd+表格拖拽排序以及上移、下移、移到顶部、移到底部