一、小U的数字插入问题
算法选择: 使用贪心算法。贪心算法的核心思想是每一步都做出局部最优的选择,以期望最终得到全局最优解。 解题思路:
- 我们需要将数字
b
插入到数字a
的某个位置,使得插入后的数字最大。 - 插入位置的选择是关键,因为不同的插入位置会导致不同的结果。
算法步骤:
1.将 a
和 b
转换为字符串形式。
2.遍历字符串 a
的每个位置,尝试将 b
插入到该位置,并记录插入后的结果。
3.比较所有可能的插入结果,选择最大的一个。
注意点:
1.数据类型的转换
- 字符串转换:由于需要在数字的不同位置进行插入操作,需要将数字
a
和b
转换为字符串形式然后进行字符串拼接操作。 - 整数转换:在比较插入后的结果时,需要将字符串转换回整数形式,以便进行数值比较。
2. 插入位置的选择
- 遍历所有可能的插入位置:我们需要遍历数字
a
的所有可能插入位置(包括在数字a
的开头和结尾),以确保找到最大的插入结果。
二、 小C点菜问题 解题思路:
- 这道题可以用到两个数据结构,一个是Counter,一个是列表推导式
Counter
是一个非常有用的工具,可以用来统计列表中每个元素出现的次数。对于这道题,用Counter
来统计每道菜的价格出现的次数- 使用列表推导式
[t for t in d.items() if t[0] <= m]
过滤出价格不超过m
的菜品。 - 算法步骤:
-
统计每道菜的价格出现的次数:
- 使用
Counter
统计每道菜的价格出现的次数。
- 使用
-
过滤价格不超过
m
的菜品:- 遍历
Counter
的结果,过滤出价格不超过m
的菜品。
- 遍历
-
找到出现次数最多的菜品:
- 在过滤后的结果中,找到出现次数最多的菜品。 代码实现思路:
代码实现思路
-
统计每道菜的价格出现的次数:
- 使用
Counter(w)
来统计每道菜的价格出现的次数。
- 使用
-
过滤价格不超过
m
的菜品:- 使用列表推导式
[t for t in d.items() if t[0] <= m]
过滤出价格不超过m
的菜品。
- 使用列表推导式
-
找到出现次数最多的菜品:
- 使用
max
函数找到出现次数最多的菜品,并返回其出现次数 下面给出代码实现:
- 使用
from collections import Counter
def solution(m: int, w: list) -> int:
# write code here
d=Counter(w)
lis=[t for t in d.items() if t[0]<=m]
# print(lis)
if lis:
return sorted(lis,key=lambda item:item[1],reverse=True)[0][1]
return 0
if __name__ == '__main__':
print(solution(6, [2, 3, 3, 6, 6, 6, 9, 9, 23]) == 3)
print(solution(4, [1, 2, 4, 4, 4]) == 3)
print(solution(5, [5, 5, 5, 5, 6, 7, 8]) == 4)
print(solution(11, [14]))