
Python面试宝典
文章平均质量分 84
本专栏将介绍Python面试中的常见经典试题,包括:LeetCode、NowCoder等算法学习网站上的经典试题,华为、腾讯、阿里、字节、百度、比亚迪等大厂的经典试题,笔者工作中总结的一些非常有实战价值的面试题等。通过对这些经典试题抽丝剥茧般的深入剖析和讲解,帮你快速提高专业技能,大幅提升面试能力
希望_睿智
中国科学技术大学毕业,专注于音视频领域近二十年,全网访问量近500万,粉丝近10万。在嵌入式开发、运营级平台、音视频编解码、视频图像处理、流媒体、深度学习、人工智能等多个方向具备实战开发经验和技术积累,共发表发明专利十余项,软件著作权几十项。商务合作和推广,可私信联系。
展开
-
Python面试宝典第1题:两数之和
暴力法的时间复杂度为 O(n^2),其中 n 是数组的长度。这是因为:对于数组中的每个元素,都需要遍历其后的所有元素进行求和比较,相当于遍历两次数组。其空间复杂度为 O(1),因为它只使用了固定数量的变量,并没有额外使用与输入大小相关的存储空间。尽管暴力法在小规模数据集上可以接受,但在数据量大时效率极低。哈希映射法的时间复杂度为O(n),这是因为:每个元素只需要遍历一次数组,并且哈希表的查找操作平均情况下接近O(1)。其空间复杂度同样为O(n),因为在最坏的情况下,需要将数组中的所有元素都存储到哈希表中。原创 2024-06-29 08:41:36 · 1839 阅读 · 19 评论 -
Python面试宝典第2题:滑动窗口最大值
给定一个数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。滑动窗口每次只向右移动一位,你只可以看到在滑动窗口内的k个数字,请返回滑动窗口中的最大值。原创 2024-07-01 07:44:45 · 1331 阅读 · 13 评论 -
Python面试宝典第3题:石子游戏
Alice 和 Bob 用几堆石子在做游戏:一共有偶数堆石子,排成一行;每堆都有正整数颗石子,数目为 piles[i] 。游戏以谁手中的石子最多来决出胜负,石子的总数是奇数 ,所以没有平局。Alice 和 Bob 轮流进行,Alice 先开始 。 每个回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设 Alice 和 Bob 都发挥出最佳水平,当 Alice 赢得比赛时返回 true ,当 Bob 赢得原创 2024-07-02 07:01:09 · 1350 阅读 · 27 评论 -
Python面试宝典第4题:环形链表
给你一个链表的头节点 head ,判断链表中是否有环。如果存在环 ,则返回 true 。 否则,返回 false 。原创 2024-07-03 08:00:04 · 1109 阅读 · 33 评论 -
Python面试宝典第5题:爬楼梯
小悦爬楼梯,一次只能上1级或者2级台阶。楼梯一共有n级台阶,请问总共有多少种方法可以爬上楼?原创 2024-07-04 06:33:23 · 1687 阅读 · 20 评论 -
Python面试宝典第6题:有效的括号
给定一个只包括 '('、')'、'{'、'}'、'['、']' 这些字符的字符串,判断该字符串是否有效。有效字符串需要满足以下的条件。1、左括号必须用相同类型的右括号闭合。2、左括号必须以正确的顺序闭合。3、每个右括号都有一个对应的相同类型的左括号。注意:空字符串可被认为是有效字符串。原创 2024-07-05 08:32:03 · 1634 阅读 · 31 评论 -
Python面试宝典第7题:合并链表
将两个升序链表合并为一个新的升序链表并返回,新链表是通过拼接给定的两个链表的所有节点组成的。原创 2024-07-08 06:30:00 · 1273 阅读 · 25 评论 -
Python面试宝典第8题:二叉树遍历
递归法的时间复杂度为O(n),每个节点被访问一次。空间复杂度最好情况下为O(log n)(此时为平衡树),最坏情况下为O(n)(此时为高度为n的斜树)。递归法的实现直观反映了前序遍历的逻辑,即“根-左-右”,但存在栈溢出、空间复杂度较高等缺点。迭代法的时间复杂度也为O(n),每个节点被访问一次。空间复杂度为O(h),其中h是树的高度。对于平衡树来说为O(log n),最坏情况下(高度为n的斜树)为O(n)。相较于递归法,迭代法使用显式栈管理,空间复杂度更加可控。原创 2024-07-09 07:27:42 · 942 阅读 · 10 评论 -
Python面试宝典第9题:买卖股票
给定一个整型数组,它的第i个元素是一支给定股票第i天的价格。如果最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。原创 2024-07-10 08:13:34 · 823 阅读 · 12 评论 -
Python面试宝典第10题:精选选择题
尽管s1初始化时传入了10,但由于SingletonMeta元类的实现,s2的创建覆盖了之前实例的value属性,使得最后的实例(s1和s2相同)的value为20。weakref.ref创建的是弱引用,当对象被垃圾回收后,弱引用不会阻止对象被销毁,访问该弱引用会返回None。s[::-1]是Python中切片操作的一种形式,用于从开始到结束反向取出字符串中的字符,从而实现反转。通过定义str方法,当对象被转换为字符串时,会返回自定义的字符串表示,这里是对象的value值"10"。说法正确的是___。原创 2024-07-11 06:30:00 · 952 阅读 · 14 评论 -
Python面试宝典第11题:最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。原创 2024-07-12 08:32:05 · 2232 阅读 · 33 评论 -
Python面试宝典第12题:消失的数字
数组nums包含从0到n的所有整数,但其中缺了一个数。请编写代码,找出那个缺失的整数,并在O(n)时间内完成。原创 2024-07-15 08:06:55 · 780 阅读 · 16 评论 -
Python面试宝典第13题:最小高度树
树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,任何一个没有简单环路的连通图都是一棵树。给你一棵包含 n 个节点的树,标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表(每一个边都是一对标签),其中 edges[i] = [ai, bi],表示树中节点 ai 和 bi 之间存在一条无向边(ai不等于bi)。原创 2024-07-16 06:00:00 · 613 阅读 · 15 评论 -
Python面试宝典第14题:背包问题
现有编号从 0 到 n - 1 的 n 个背包,给你两个下标从 0 开始的整数数组 capacity 和 rocks 。第 i 个背包最大可以装 capacity[i] 块石头,当前已经装了 rocks[i] 块石头(0原创 2024-07-17 06:00:00 · 914 阅读 · 23 评论 -
Python面试宝典第15题:岛屿数量
在二维网格地图上,'1' 表示陆地,'0' 表示水域。如果相邻的陆地可以水平或垂直连接,则它们属于同一块岛屿。请进行编码,统计地图上的岛屿数量。比如:下面的二维网格地图,其岛屿数量为3。原创 2024-07-19 06:00:00 · 1497 阅读 · 16 评论 -
Python面试宝典第16题:跳跃游戏
给你一个非负整数数组 nums ,你最初位于数组的第一个下标 ,数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true。否则,返回 false。原创 2024-07-22 06:00:00 · 1015 阅读 · 21 评论 -
Python面试宝典第17题:Z字形变换
将一个给定字符串 s 根据给定的行数numRows ,以从上往下、从左到右进行Z字形排列。比如:输入字符串为"PAYPALISHIRING",行数为3时,排列如下。最后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。原创 2024-07-23 06:00:00 · 1280 阅读 · 26 评论 -
Python面试宝典第18题:单词搜索
给定一个m x n的二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true。否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成。所谓相邻单元格,是那些水平相邻或垂直相邻的单元格。原创 2024-07-24 06:00:00 · 830 阅读 · 16 评论 -
Python面试宝典第19题:最小路径和
给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。原创 2024-07-25 08:29:38 · 1757 阅读 · 23 评论 -
Python面试宝典第20题:精选问答题
装饰器是Python的一种语法糖,允许程序员在不修改原有函数定义的情况下,给函数添加额外功能。装饰器本质上是一个接受函数作为参数的函数,它返回一个新的函数。通常情况下,定义装饰器使用@decorator_func语法。原创 2024-07-26 08:19:38 · 1460 阅读 · 25 评论 -
Python面试宝典第21题:最大正方形
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。对于每个矩阵中的元素,都需要尝试以其为起点的所有可能的正方形大小,直到达到矩阵的边界或遇到'0'停止。因此,对于每个元素,最坏情况下需要检查从1到该元素所在行和列的最小长度的所有正方形,导致总体时间复杂度为O(m*n*min(m,n)^2),其中m和n分别是矩阵的行数和列数。暴力法的空间复杂度相对较低,主要是存储原始矩阵的空间,即O(m*n)。动态规划法的时间复杂度为O(m*n)原创 2024-07-29 06:00:00 · 1610 阅读 · 22 评论 -
Python面试宝典第22题:接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。暴力法通过遍历每个柱子,分别计算其左右两边的最大高度,从而确定当前位置能储存的雨水量。这种方法简单直接,但效率低下,时间复杂度为O(n^2),不适用于大规模数据。动态规划法利用两个数组分别记录从左到右和从右到左扫描过程中的最大高度,然后遍历每个柱子,计算雨水量。这种方法相比暴力法显著提高了效率,时间复杂度为O(n),空间复杂度也为O(n)。原创 2024-07-30 06:00:00 · 1207 阅读 · 11 评论 -
Python面试宝典第23题:分发糖果
n 个孩子站成一排,给你一个整数数组 ratings 表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果。(1)每个孩子至少分配到 1 个糖果。 (2)相邻两个孩子评分更高的孩子会获得更多的糖果。请你给每个孩子分发糖果,计算并返回需要准备的最少糖果数目 。原创 2024-07-31 06:00:00 · 1438 阅读 · 33 评论 -
Python面试宝典第24题:找不同的数
1、在一个整型数组中,数字都是两两相同,只有一个不同,请编写代码,最快找出这个不同的数字。2、在一个整型数组中,数字都是两两相同,只有两个不同,请编写代码,最快找出这两个不同的数字。原创 2024-08-01 06:00:00 · 641 阅读 · 3 评论 -
Python面试宝典第25题:括号生成
数字n代表生成括号的对数,请设计一个函数,用于能够生成所有可能的并且有效的括号组合。递归法求解本题的时间复杂度主要取决于生成的括号组合的数量。对于n对括号,有效的括号组合数量遵循卡特兰数,其公式为C_n = (1/(n+1)) * (2n choose n)。卡特兰数的增长速度非常快,大约是 4^n / (sqrt(pi*n)*n^(3/2))。因此,时间复杂度为 O(C_n),即:O(4^n / sqrt(n))。空间复杂度主要由递归栈的深度决定,最坏情况下,递归栈的深度为2n,故空间复杂度为O(n)。原创 2024-08-02 06:00:00 · 1660 阅读 · 28 评论 -
Python面试宝典第26题:最长公共子序列
一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。比如:"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的公共子序列是这两个字符串所共同拥有的子序列。现给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列 ,返回0。原创 2024-08-03 11:33:40 · 1114 阅读 · 29 评论 -
Python面试宝典第27题:全排列
给定一个不含重复数字的数组nums,返回其所有可能的全排列 。备注:可以按任意顺序返回答案。使用回溯法和迭代法求解本题的时间复杂度均为O(N * N!),这是因为,对于一个长度为N的序列,有N!种排列方式,每一种排列都需要O(N)的时间来构建。原创 2024-08-05 06:00:00 · 1360 阅读 · 23 评论 -
Python面试宝典第28题:合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi],且endi大于starti。请合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。原创 2024-08-07 06:00:00 · 805 阅读 · 26 评论 -
Python面试宝典第29题:袋鼠过河
一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子。每隔一米就有一个桩子,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳得更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5,就代表袋鼠下一跳最多能够跳5米;如果为0,就会陷进去无法继续跳跃。河流一共N米宽,袋鼠初始位置就在第一个弹簧上面,要跳到最后一个弹簧之后就算过河了。给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达,则输出-1。原创 2024-08-08 06:00:00 · 3273 阅读 · 14 评论 -
Python面试宝典第30题:找出第K大元素
给定一个整数数组nums,请找出数组中第K大的数,保证答案存在。其中,1原创 2024-08-09 08:55:21 · 2329 阅读 · 19 评论 -
Python面试宝典第31题:字符串反转
编写一个函数,其作用是将输入的字符串反转过来,输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组,并使用O(1)的额外空间解决这一问题。备注:s[i]都是ASCII码表中的可打印字符。原创 2024-08-11 07:08:06 · 966 阅读 · 17 评论 -
Python面试宝典第32题:课程表
你这个学期必须选修numCourses门课程,记为0到numCourses - 1。在选修某些课程之前,需要一些先修课程。先修课程按数组prerequisites给出,其中prerequisites[i] = [ai, bi],表示如果要学习课程ai,则必须先学习课程bi。比如:先修课程对[0, 1]表示想要学习课程0,你需要先完成课程1。请你判断是否可能完成所有课程的学习?如果可以,返回true。否则,返回false。原创 2024-08-12 05:00:00 · 1467 阅读 · 21 评论 -
Python面试宝典第33题:电话号码的字母组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合,答案可以按任意顺序返回。给出数字到字母的映射如下图(与手机按键相同)。注意:1不对应任何字母。原创 2024-08-13 06:00:00 · 2769 阅读 · 10 评论 -
Python面试宝典第34题:旋转图像
给定一个n × n的二维矩阵matrix表示一个图像,请你将图像顺时针旋转90度。注意:你必须在原地旋转图像。这意味着,你需要直接修改输入的二维矩阵,而不能使用另一个矩阵来旋转图像。原创 2024-08-14 06:00:00 · 781 阅读 · 25 评论 -
Python面试宝典第35题:字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的BigInteger库或直接将输入转换为整数。原创 2024-08-19 05:30:00 · 1107 阅读 · 30 评论 -
Python面试宝典第36题:数组的交集
给定两个数组nums1和nums2,返回它们的交集 。输出结果中的每个元素一定是唯一的,我们可以不考虑输出结果的顺序。原创 2024-08-20 06:00:00 · 840 阅读 · 26 评论 -
Python面试宝典第37题:有效的完全平方数
完全平方数是一个可以写成某个整数的平方的整数,换句话说,它可以写成某个整数和自身的乘积。现给你一个正整数num,如果num是一个完全平方数,则返回true,否则返回false。注意:不能使用任何内置的库函数(比如:sqrt)。原创 2024-08-21 05:30:00 · 1018 阅读 · 30 评论 -
Python面试宝典第38题:数组中的逆序对
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。原创 2024-08-22 05:30:00 · 648 阅读 · 22 评论 -
Python面试宝典第39题:盛最多水的容器
给定n个非负整数a1、a2、…、an,每个数代表坐标中的一个点(i, ai)。画n条垂直线,使得第i条垂直线的两个端点分别为(i, ai)和(i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:不能倾斜容器,且n的取值至少为2。原创 2024-08-26 06:30:00 · 784 阅读 · 27 评论 -
Python面试宝典第40题:有效的数独
判断一个9 x 9的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。1、数字1-9在每一行只能出现一次。2、数字1-9在每一列只能出现一次。3、数字1-9在每一个以粗实线分隔的3 x 3宫内只能出现一次。原创 2024-08-27 06:30:00 · 1037 阅读 · 28 评论