Python面试30分钟突击掌握-LeetCode1-Array

Python 面试 30 分钟突击掌握:LeetCode 第一篇(Array)

如果你正在准备 Python 开发岗面试,时间又不多,这篇文章就是为你准备的。

很多同学刷题时容易陷入两个误区:

  1. 只看答案,不自己推导;
  2. 只记代码,不理解"为什么这样做"。

面试官真正想看到的,不是你背过多少题,而是你是否具备拆解问题、选择结构、评估复杂度、清晰表达 的能力。

数组(Array)题目恰好是这四项能力最常见的考察入口。


为什么先练 Array?

在真实面试中,Array 是出镜率极高的题型,原因很简单:

  • 数组是最基础的数据结构,几乎所有业务代码都会接触;
  • 可以自然延伸到哈希表、双指针、滑动窗口、前缀和等高频技巧;
  • 易于从"简单题"问到"进阶优化题",非常适合面试追问。

如果你只有 30 分钟,建议先把以下两题吃透:

  • Single Number
  • Two Sum

这两题覆盖了面试中的两类核心思路:位运算消重哈希换时间


今天的突击目标

你不需要一口气刷很多题,只要做到这四点:

  • 能在不看答案的前提下写出 AC 代码;
  • 能说清楚时间复杂度和空间复杂度;
  • 能解释为什么这个解法优于朴素解法;
  • 能描述常见边界条件和易错点。

题目一:Single Number(只出现一次的数字)

题目描述

给定一个非空整数数组 nums,除了某个元素只出现一次以外,其余每个元素都出现两次。请找出那个只出现一次的元素。

要求:

  • 时间复杂度为线性级别 O(n)
  • 额外空间复杂度为常数级别 O(1)

示例:

  • 输入:[2,2,1],输出:1
  • 输入:[4,1,2,1,2],输出:4
  • 输入:[1],输出:1

面试中的思考路径

很多人第一反应是"排序后相邻比较",这能做出来,但复杂度是 O(n log n),不满足线性要求。

也有人想到用哈希计数,时间是 O(n),但空间是 O(n),不满足常数空间要求。

这时你要主动向面试官表达:

题目同时要求 O(n) 时间和 O(1) 空间,通常在暗示位运算(XOR)。

关键知识:异或 XOR

异或有三个特别有用的性质:

  • a ^ a = 0(相同数字异或为 0)
  • a ^ 0 = a(任何数字与 0 异或还是自己)
  • 满足交换律和结合律(顺序不影响结果)

因此,数组里成对出现的数字最终都会被"抵消",只剩下那个只出现一次的数字。

Python 参考实现

python 复制代码
from typing import List


class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        result = 0
        for value in nums:
            result ^= value
        return result

复杂度分析

  • 时间复杂度:O(n),遍历一次数组;
  • 空间复杂度:O(1),只用了一个变量。

面试易错点

  • 忘记解释"为什么是 O(1) 空间";
  • 只给代码,不给位运算性质推导;
  • 把异或写成了按位或 | 或按位与 &

题目二:Two Sum(两数之和)

题目描述

给定一个整数数组 nums 和一个目标值 target,请返回两个数的下标,使它们之和等于 target

约束条件:

  • 每种输入只会对应一个有效答案;
  • 同一个元素不能重复使用;
  • 返回下标顺序不限。

示例:

  • nums = [2,7,11,15], target = 9,返回 [0,1]
  • nums = [3,2,4], target = 6,返回 [1,2]
  • nums = [3,3], target = 6,返回 [0,1]

面试中的思考路径

朴素做法是双重循环,复杂度 O(n^2)

题目 follow-up 会问:能否优于 O(n^2)

这个追问基本就是在引导你使用哈希表(字典):

  • 遍历当前值 value
  • 计算补数 need = target - value
  • need 是否已经在哈希表中;
  • 如果在,直接返回对应下标和当前下标;
  • 如果不在,把当前值和下标存入哈希表,继续遍历。

Python 参考实现

python 复制代码
from typing import List


class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        index_map = {}
        for i, value in enumerate(nums):
            need = target - value
            if need in index_map:
                return [index_map[need], i]
            index_map[value] = i
        return []

复杂度分析

  • 时间复杂度:O(n),每个元素只处理一次;
  • 空间复杂度:O(n),最坏情况下哈希表存下所有元素。

面试易错点

  • 先把当前值放入哈希表,再查补数,导致某些场景下错误复用自己;
  • 只会写代码,不会解释"为什么哈希可以把两层循环降成一层";
  • 遇到重复元素(如 [3,3])时思路混乱。

30 分钟高效练习法(推荐)

如果你现在就要突击,按这个节奏走:

  1. 5 分钟:看题 + 口述思路(先别写代码)
  2. 10 分钟 :独立手写 Single NumberTwo Sum
  3. 10 分钟:对照复杂度、边界条件,优化表达
  4. 5 分钟:脱稿复述(像在真实面试中那样讲给别人听)

你会发现,真正拉开差距的不是"会不会",而是"能不能讲清楚"。


面试表达模板(可直接套用)

你可以这样说:

这题我先考虑朴素解法,时间复杂度是 O(n^2)

由于题目追求更优复杂度,我会用哈希表把查找从线性降到常数平均时间,整体优化到 O(n)

空间上会增加到 O(n),这是典型的空间换时间。

我还会注意重复元素和不能复用同一元素这两个边界约束。

这段表达对 Two Sum 非常加分,也能迁移到很多类似题目。


小结

Array 是面试高频中的高频,Single NumberTwo Sum 是你必须拿下的基础分。

请记住:刷题不是背答案,而是训练你在压力下快速建立正确解法并清晰表达。

如果你把本文两题做到下面这个标准,面试通过率会明显提升:

  • 代码能在白板/在线编辑器中一次写对;
  • 复杂度能张口即来;
  • 追问"还能更优吗"时不慌;
  • 能讲出方法选择背后的理由。

下一步你可以继续进入 Array 进阶题:双指针、滑动窗口和前缀和。

把这条主线打通,你在 Python 开发岗面试中的算法表现会稳定很多。

相关推荐
Kiri霧2 小时前
Kotlin递归
android·开发语言·kotlin
怪祝浙2 小时前
超简洁YOLO8n快速上手人员检测
python
范纹杉想快点毕业2 小时前
Zynq开发视角下的C语言能力分级详解
c语言·开发语言
常利兵2 小时前
Kotlin抽象类与接口:相爱相杀的编程“CP”
android·开发语言·kotlin
2501_944448472 小时前
数据可视化 Kotlin KMP OpenHarmony图表生成
开发语言·信息可视化·harmonyos
Arkerman_Liwei2 小时前
Android 新开发模式深度实践:Kotlin + 协程 + Flow+MVVM
android·开发语言·kotlin
财经资讯数据_灵砚智能2 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年4月10日
人工智能·python·信息可视化·自然语言处理·ai编程
xinhuanjieyi2 小时前
MCP分析某wordpress网站 时间所在的背景动画,并用php框架webman复刻下来
开发语言·php
jwn9992 小时前
Laravel1.x:PHP框架的初心与革新
开发语言·php