python常见算法面试题

这篇博客主要探讨了Python中常见的算法面试题目,包括闭包延迟绑定现象、两数之和问题的解决方案、查找数组中重复数字的方法、使用队列实现栈的功能、判断回文数的逻辑以及如何反转字符数组。此外,还提到了生成器和迭代器在生成斐波那契数列中的应用以及冒泡排序的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么输出6,6,6,6

def num():
    return [lambda x: i*x for i in range(4)]   # 这里使用的是lambda函数 
print([m(2) for m in num()])     # 输出: [6, 6, 6, 6]

思路

这题涉及到了闭包延时绑定,当循环执行完了之后才会执行传参,循环四次,每一次循环完 i=3 然后再和x相乘 所以结果是6,6,6,6。 如果把 [ lambda x: ix for i in range(4) ] 改成 ( lambda x: ix for i in range(4) )这样就变成了一个生成器 自动实现迭代器协议,一边循环一边计算的机制, 这样结果就是 0,2,4,6.

两数之和

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

思路:

这里可以使用字典来解题,通过enumerate方法遍历获取数据的下标包括对应值,然后以key,value形式把该数据的下标和对应值存入字典,然后再出通过enumerate方法遍历数据,每一次获取数据就从字典拿出一个值,用目标值减去从字典拿出的这个值得到一个结果值,如果结果值存在字典当中,那么返回两个数的下标,如果为None,说明字典中没有这个值。

def get_index_list(nums, target):

    # Todo 作为一个方法来实现,批量解决这个获取索引的问题
    """
    :params nums:传的参数的列表
    :params target: 目标值
    :return: 返回索引
    """

    dic = {
   }

    for a, b in enumerate(nums):  # a是下标 b是对应值

        dic[b] = a  # 对应值存入字典

    for i, b in enumerate(nums):

        j = dic.get(target-b)  # 从字典中拿出对应值 用目标值减去对应值

        if j is not None:  # 判断如果减去的对应值不为空,则返回下标

            return [i, j]
if __name__ == "__main__":
    print(get_index_list([2, 7, 11, 15],9))

数组中重复的数字

示例:

输入:
[2,3,1,0,2,5,3]
输出: 23

思路:

这道题想到的是,使用列表中的count方法,定义一个空列表,遍历数据然后进行判断,如果数据值出现个数大于或等于2,说明该数据是重复的,然后把重复的筛取出来之后存入空列表,再进行返回输出。

实现代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值