python算法实战
去年报名了蓝桥杯,却一直没有练习,也该开始了,为了300的报名费
时间复杂度
O(1),O(n),O($n^{2}$),O($log_{2}n$),O(n!)…
空间复杂度
递归
实例
1 | def jiecheng(n): |
1 | #结果 |
查找
- 顺序查找
- 二分查找
顺序查找
1 | def shuxu(list_1, val): |
1 | #结果 |
二分查找
1 | def binary_search(my_list, val): # my_list 为list,val为待查找的值 |
排序
将一组无序序列变为有序序列
升序与降序
内置排序算法sort()
- LOW
- 冒泡排序
- 选择排序
- 插入排序
- NB
- 快速排序
- 堆排序
- 归并排序
- 其他
- 希儿排序
- 计数排序
- 基数排序
sort的使用
需要注意的是,sort()方法会直接修改原列表,而不是返回一个新的排序后的列表
冒泡排序
- 列表每相邻的两个数,如果后面比前面大,交换两个数
- 一次排序,无序区减少一个数,有序区增加一个数
1 | import random |
1 | # 结果 |
range详解
range() 函数是 Python 中常用的一个函数,用于生成一个整数序列。它常用于循环中,可以生成指定范围的整数序列。
range() 函数有三种常用的用法:
- range(stop): 生成从 0 开始到 stop-1 的整数序列。
- range(start, stop): 生成从 start 开始到 stop-1 的整数序列。
- range(start, stop, step): 生成从 start 开始到 stop-1 的整数序列,步长为 step。需要注意的是,range() 函数生成的是一个可迭代对象,而不是一个列表。如果需要得到一个列表,可以使用 list() 函数将其转换为列表:
1
2
3
4
5
6
7
8
9
10
11
12# 生成从 0 到 4 的整数序列
for i in range(5):
print(i) # 输出:0, 1, 2, 3, 4
# 生成从 2 到 5 的整数序列
for i in range(2, 6):
print(i) # 输出:2, 3, 4, 5
# 生成从 1 到 10 的偶数序列
for i in range(2, 11, 2):
print(i) # 输出:2, 4, 6, 8, 101
2my_list = list(range(5)) # 将 range 对象转换为列表
print(my_list) # 输出:[0, 1, 2, 3, 4]
random详解
使用前需要import random
- random.random(): 返回一个 [0.0, 1.0) 之间的随机浮点数。
- random.randint(a, b): 返回一个 [a, b] 之间的随机整数。
- random.uniform(a, b): 返回一个 [a, b] 之间的随机浮点数。
- random.choice(seq): 从序列 seq 中随机选择一个元素返回。
- random.shuffle(seq): 将序列 seq 中的元素随机排序
- random.sample(population, k): 从 population 中随机选择 k 个不重复的元素返回,返回一个列表。
选择排序
打擂台排序
1 | import random |
1 | # 结果 |
插入排序
- 初始时手里(有序区)只有一张牌
- 每次(从无序区)摸一张牌,插入到手里已有牌的正确位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18import random
def insert_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
my_list = [random.randint(0, 10000) for i in range(5)]
print(my_list)
insert_sort(my_list)
print(my_list)1
2
3# 结果
[904, 5335, 5843, 9487, 1597]
[904, 1597, 5335, 5843, 9487]
数据结构
python中数据结构的类型
- 元组
- 无法修改,tuple,不可变数据结构
- 利用in查找
- 列表
- 支持增删改查
- 切片[x:y],左闭右开
- 追加,列表末尾增加元素list.append(元素)
- 插入,list.insert(下标,元素)
- 删除, list.pop(下标),默认为最后一个元素
- 字典
- 删除,dictionary.pop(“键”)
字符与字符串实战
统计出其中数字字符的个数
输入一行字符,统计出其中数字字符的个数。
1 | user_input = input() |
isdigit() 是 Python 中字符串对象的一个方法,用于检查字符串中的所有字符是否都是数字字符(即 0-9)。
可以改为
1 | user_input = input() |
给定一个只包含小写字母的字符串
请你找到第一个仅出现一次的字符。如果没有,输出 no
1 | my_list = input() |
详解count
count() 方法是字符串对象的一个内置方法,用于统计指定子字符串在原字符串中出现的次数。
count() 方法只会统计不重叠的子字符串。例如,在字符串 “aaaaa” 中统计子字符串 “aa” 的出现次数,结果为 2,而不是 4,因为两个 “aa” 子字符串之间重叠