【蓝桥杯算法】基础算法
看不到代码请重新刷新此页面
快读模版,可以提高读入数据效率
import sys
input = lambda:sys.stdin.readline().stripimport sys:导入 Python 的
sys模块,用于访问与 Python 解释器相关的变量和函数。
sys.stdin.readline():sys.stdin是标准输入流,readline()方法用于从输入流中读取一行内容。与内置的
input()函数不同,sys.stdin.readline()不会自动去除行末的换行符。
.strip():去除字符串首尾的空白字符(包括换行符、空格等)。
lambda: ...:定义一个匿名函数,并将其赋值给变量
input。这样,每次调用
input()时,都会执行sys.stdin.readline().strip()。
使用场景:
算法竞赛:在需要高效读取大量输入时,
sys.stdin.readline()比内置的input()更快。批量输入处理:当输入数据有多行时,可以结合循环使用。
内置排序
列表的sort()方法
sort()是列表对象的一个方法,它会原地修改列表,直接排序,不返回新的列表。
list.sort(key=None,resverse = False)
key:排序规则,类sisorted()的key
resverse:是否反向排序,默认为False
nums = [5,3,8,6,7]
nums.sort() #原地升序排序
print(nums) #[3, 5, 6, 7, 8]
word = ['apple','banana','kiwi','cherry']
word.sort(key= len) #按照字符串长度来排序
print(word) #['kiwi', 'apple', 'banana', 'cherry']lambda表达式
x = lambda a:a + 10
print(x(5))这里的,lambda是python的关键字,用于定义lambda函数。参数是参数列表,可以包含零个或多个参数,但必须在冒汗(:)前指定。
表达式是一个用于计算机并返回函数结果的表达式
例如,创建一个lambda函数,他接受一个参数并返回该参数10的结果:
获得中位数
get_mid = lambda nums:nums[len(nums)//2]
print(get_mid([1,2,3,4,5]))按照第二个字符排序
使用lambda表达式与排序
有时我们需要更加灵活的排序方式,可以使用lambda表达式作为key参数指定排序规则。
words = ['apple','banana','kiwi','cherry']
sorted_words = sorted(words,key=lambda x:x[1])
print(sorted_words) #['kiwi', 'apple', 'banana', 'cherry']***输入
# 示例1:单行多个整数
a,b,c = map(int,input().split())
print(a,b,c)
# 示例2:多行多个整数
n = int(input())
lst = [int(input()) for _ in range(n)] #读取n行整数
print(lst)
# 示例3:矩阵输入
n,m = map(int,input().split()) #输入矩阵大小
matrix = [list(map(int,input().split()))for _ in range(n)]
print(matrix)算法步骤
找一个基准值x
把列表分成三部分:小于等于x的数字,x,大于x的数字
左半部分和右半部分递归使用该策略
例如:a = 【3,5,8,1,2,9,4,7,6】
找到基准值3,【1,2】3【5,8,9,4,7,6】
左半部分【1,2】作为一个子问题求解
右部分作为【5,8,9,4,7,6】
例如:a = 【3,5,8,1,2,9,4,7,6】,left = 0,right = 8
设置基准值下标为left
存放小于等于基准值下标为idx = left+1
从left+1到right每个元素a[i]:
如果a[i]<=基准值:则将a[i],a[idx]互换,idx+=1
最终结果【2,1】【3】【5,8,9,5,7,6】
左侧和右侧重复上述操作
**列表推导器
expression for item in iterable if condition这是一个 列表推导式(List Comprehension) 的语法结构(也适用于其他推导式,如集合、字典或生成器表达式)。它的作用是从一个可迭代对象(如列表、元组等)中筛选和处理元素,生成一个新的列表(或其他数据结构)。
语法结构分解:
[expression for item in iterable if condition](注:方括号 [] 表示生成列表,其他推导式可能用 {} 或 ())
expression对当前迭代项item的处理表达式,结果会加入最终生成的列表。(例如:x * 2或函数调用func(x))
for item in iterable遍历可迭代对象iterable,每次迭代的当前元素赋值给变量item。(例如:for x in [1, 2, 3])
if condition(可选)过滤条件:只有满足condition的item才会被处理并加入结果列表。(例如:if x % 2 == 0筛选偶数)
执行顺序:
遍历
iterable中的每个item。检查
if condition是否为True。若条件满足,计算
expression并将结果加入最终列表。
示例:
# 生成 0-9 中偶数的平方组成的列表
squares = [x**2 for x in range(10) if x % 2 == 0]
print(squares) # 输出: [0, 4, 16, 36, 64]其他形式的推导式:
集合推导式(去重):
{x for x in iterable if condition}
字典推导式(键值对):
{key: value for item in iterable if condition}
生成器表达式(惰性计算):
(x for x in iterable if condition)
注意事项:
若
condition不满足,当前item会被直接跳过。可以嵌套多个
for循环或if条件(但需保持可读性)。若需要
else分支,需将条件逻辑放在expression中:[x if condition else y for item in iterable]
expression:表达式,用于生产列表中的元素
item:可迭代对象中的每个元素
itrable:可迭代对象
condition:可选,用于过滤元素的条件
示例1:生成1 到 10 的平方列表
squares = [i**2 for i in range(1,11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]示例2:过滤出 1 到 20 中的偶数
evens = [i for i in range(1,21)if i % 2 == 0]
# [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]示例3:将输入的字符串列表转换为整数列表
input_data = list(map(int,input().split()))
# 使用列表推导器实现
input_data = [int(x) for x in input().split()]
# 1 2 3 4 5
# [1, 2, 3, 4, 5]**斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列( [1]),因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:0、1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
冒泡排序
- 感谢你赐予我前进的力量

