求助:Python实现符合筛选规则的笔记本电脑选择算法
笔记本电脑筛选逻辑实现
需求回顾
- 规则1:若某台笔记本的CPU速度、RAM容量、硬盘容量均低于另一台,则该笔记本视为过时,不纳入选购范围
- 规则2:在未被淘汰的笔记本中,选择价格最低的,输出其输入时的序号(从1开始)
修正并补全后的完整代码
N = int(input()) # 存储每台笔记本的信息:(cpu, ram, harddisk, price, 序号) laptops = [] for idx in range(1, N+1): cpu, ram, hd, price = map(int, input().split()) laptops.append((cpu, ram, hd, price, idx)) # 筛选未被淘汰的笔记本 valid_laptops = [] for laptop in laptops: cpu1, ram1, hd1, _, _ = laptop # 标记是否被淘汰 is_obsolete = False for other in laptops: cpu2, ram2, hd2, _, _ = other # 如果存在另一台笔记本的三项配置都更高,则当前笔记本过时 if cpu2 > cpu1 and ram2 > ram1 and hd2 > hd1: is_obsolete = True break if not is_obsolete: valid_laptops.append(laptop) # 在有效列表中找价格最低的,若有多个价格相同,取最先输入的(序号小的) valid_laptops.sort(key=lambda x: (x[3], x[4])) print(valid_laptops[0][4])
代码说明
- 存储结构优化:把每台笔记本的4项参数加上序号存入元组,再统一放入列表,相比原代码的二维列表结构,更直观易读,后续处理也更方便。
- 淘汰逻辑实现:对每台笔记本,遍历其他所有笔记本,只要存在任意一台的CPU、RAM、硬盘配置都比它高,就标记为过时并终止当前判断。
- 选择最优笔记本:对有效笔记本列表,先按价格升序排序,价格相同时按序号升序(保证选最先输入的),直接取第一个元素的序号输出即可。
关于复杂度的说明
这里是两层循环(外层遍历每台笔记本,内层遍历其他笔记本),时间复杂度为O(N²),对于常规的笔记本选购数量(N不会特别大)来说完全够用。如果追求更优的复杂度,可以先对笔记本按某一配置排序后优化判断,但对于大多数场景,当前实现的简洁性和可读性更重要。
内容的提问来源于stack exchange,提问作者minoisfree
相关产品推荐
相关产品推荐

