【华为OD】 C卷真题:最多购买宝石数目python实现

华为OD】 C真题 100%通过:最多购买宝石数目 C/C++实现【代码+思路】 橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],, n =gems.length宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;例如客户最大购买宝石个数为m,购买宝石编号必须为gems[i],gems[i+1]...gems[i+m-1]假设你当前拥有总面值为value的钱,请问最多购买到多少个宝石,如无法购买宝石,则返回0. 阅读详情

标题【华为OD】 C卷真题 最多购买宝石数目 Python实现

题目描述:
橱窗里有一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],0<=i<n, n = gems.length
宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;例如客户最大购买宝石个数为m,购买的宝石编号必须为gems[i],gems[i+1]…gemsi+m-1
假设你当前拥有总面值为value的钱,请问最多能购买到多少个宝石,如无法购买宝石,则返回0.

输入描述

第一行输入n,参数类型为int,取值范围:[0,10的6次方],表示橱窗中宝石的总数量。

之后n行分别表示从第0个到第n-1个宝石的价格,即gems[0]到gems[n-1]的价格,类型为int,取值范围:(0,1000]。

之后一行输入v,类型为int,取值范围:[0,10的9次方]表示你拥有的钱。

输出描述

输出int类型的返回值,表示最大可购买的宝石数量。

示例1
输入输出示例仅供调试,后台判题数据一般不包含示例

输入

7
8
4
6
3
1
6
7
10

输出

3

说明

gems = [8,4,6,3,1,6,7], value = 10
最多购买的宝石为gems[2]至gems[4]或者gems[3]至gems[5]

示例2
输入输出示例仅供调试,后台判题数据一般不包含示例

输入

0
1

输出

0

说明

gems = [], value = 1
因为没有宝石,所以返回0

示例3
输入输出示例仅供调试,后台判题数据一般不包含示例

输入

9
6
1
3
1
8
9
3
2
4
15

输出

4

说明

gems = [6, 1, 3, 1, 8, 9, 3, 2, 4], value = 15
最多购买的宝石为gems[0]至gems[3]

示例4
输入输出示例仅供调试,后台判题数据一般不包含示例

输入

9
1
1
1
1
1
1
1
1
1
10

输出

9

说明

gems = [1, 1, 1, 1, 1, 1, 1, 1, 1], value = 10
最多购买的宝石为gems[0]至gems[8],即全部购买

解题思路

由于购买的宝石最大花费的钱确定,所以可以理解为该题为一个以最大以value为窗口限制的滑动窗口题目:

def max_buy(num, bs, money):
    max_num = 0
    value = 0
    idxs = []  # 用于保存能购买的下标
    for j in range(num):
        if bs[j] > money:
            # 当前宝石单颗的价格超过了总钱数money,是买不起的,将value, idxs重置后直接跳过
            value = 0
            idxs = []
            continue
        while value + bs[j] > money:
            value -= bs[idxs[0]]
            # 将最前面的宝石减去
            idxs.pop(0)
        value += bs[j]
        idxs.append(j)
        max_num = max(max_num, len(idxs))
    return max_num


try:
    num = int(input())
    bs = []
    for i in range(num):
        v = int(input())
        bs.append(v)
    money = int(input())
    print(max_buy(num, bs, money))
except Exception:
    pass

华为OD机考2025C - 最多购买宝石数目(Java & Python& JS & C++ & C ) 华为OD机考2025C - 最多购买宝石数目OD上机考试2025年C)。提供在线OJ刷题。Java、C++、Python、C语言、JavaScript题解,并提供完整思路讲解。 阅读详情

相关推荐

最多购买宝石数目华为OD机试JAVA&Python&C++&JS题解】

最多购买宝石数目华为OD机试JAVA&Python&C++&JS题解】 橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],0

博客 573

华为OD机试】最多购买宝石数目(贪心算法实现-Java&Python&C++&JS实现

华为OD机试】最多购买宝石数目(贪心算法实现-Java&Python&C++&JS实现橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],0

一键难忘的博客 2489

【2024华为OD机试C】401、最多购买宝石数目 | 机试真题+思路参考+代码解析(C语言、C++、Java、Py、JS)

题目描述 >橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],0例如客户最大购买宝石个数为m,购买宝石编号必须为gems[i],gems[i+1]...gems [i+m-1] (0

KJ.JK 1801

华为OD】 C真题 100%通过:最多购买宝石数目 Python实现【思路+源码】

橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],0

十年以上编程经验的干货分享 1007

2026华为OD机试(Python真题【E+A+B+C+D】目录+在线OJ

华为OD机试真题题库【E+A+B+C+D】目录,Python实现

MISAYAONE的博客 28万+

华为OD】 C真题 100%通过:最多购买宝石数目 JS实现【思路+源码】

橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],, n =gems.length宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;例如客户最大购买宝石个数为m,购买宝石编号必须为gems[i],gems[i+1]...gems[i+m-1]假设你当前拥有总面值为value的钱,请问最多购买到多少个宝石,如无法购买宝石,则返回0.

十年以上编程经验的干货分享 1267

华为OD】 C真题 100%通过:最多购买宝石数目 C语言实现【思路+源码】

橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],, n =gems.length宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续;例如客户最大购买宝石个数为m,购买宝石编号必须为gems[i],gems[i+1]...gems[i+m-1]假设你当前拥有总面值为value的钱,请问最多购买到多少个宝石,如无法购买宝石,则返回0.

十年以上编程经验的干货分享 1183

2026华为OD机试(C语言)真题【E+A+B+C+D】目录+在线OJ

华为OD机试真题题库【E+A+B+C+D】目录,C语言实现

MISAYAONE的博客 11万+

2026华为OD机考新系统真题 + 双机位C + 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸!

算法大师! 45万+

华为OD】 C真题 100%通过:最多购买宝石数目 Java实现【思路+源码】

橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],0

十年以上编程经验的干货分享 1016

华为OD机试C-- 最多购买宝石数目(Java & JS & Python & C)

橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为 gems[i] - 0 ≤ i < n - n = gems.length 宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续; 例如客户最大购买宝石个数为m,购买宝石编号必须为:gems[i],gems[i+1],...,gems[i+m-1] - 0 ≤ i < n - m ≤ n 假设你当前拥有总面值为 value 的钱,请问最多购买到多少个宝石,如无法购买宝石,则返回0。

wbajsjhhhhh的博客 3410

华为OD机试真题 Java语言】401、最多购买宝石数目 | 机试真题+思路参考+代码解析(最新抽中C)(本题100%)

题目描述 >橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为gems[i],0例如客户最大购买宝石个数为m,购买宝石编号必须为gems[i],gems[i+1]...gems [i+m-1] (0

KJ.JK 2244

华为OD机试 新系统 双机位C 真题题库目录|机考题库 + 算法考点详解

本文整理华为OD机试(机考) 新系统真题题库,提供高频考点精析与详细题目内容,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解 和 在线OJ做题练习。华为OD机试新系统真题题库。

qq_45776114的博客 10万+

华为OD机试D --最多购买宝石数目--24年OD统一考试(Java & JS & Python & C & C++)

橱窗一排宝石,不同的宝石对应不同的价格,宝石的价格标记为 gems[i] 0 ≤ i < n n = gems.length 宝石可同时出售0个或多个,如果同时出售多个,则要求出售的宝石编号连续; 例如客户最大购买宝石个数为m,购买宝石编号必须为:gems[i],gems[i+1],…,gems[i+m-1] 0 ≤ i < n m ≤ n 假设你当前拥有总面值为 value 的钱,请问最多购买到多少个宝石,如无法购买宝石,则返回0。

wbajsjhhhhh的博客 5416

华为OD】2024年华为OD机试C、D真题集:最新的真题集题库 C/C++/Java/python/JavaScript

华为OD真题,2024年C真题题集,有2种分数的题目列表,分别是100分的列表、200分的列表

十年以上编程经验的干货分享 3216

华为OD机试|华为od题库|华为od机考|2025真题目录Python实现|2025CB

华为OD机试|华为od题库|华为od机考|2025真题目录Python实现|华为OD机试|华为od题库|华为od机考|2025真题目录Python实现|华为OD机试|华为od题库|华为od机考|2025真题目录Python实现|华为OD机试|华为od题库|华为od机考|2025真题目录Python实现|华为OD机试|华为od题库|华为od机考|2025真题目录Python实现|BC

u014481728的博客 8万+

华为OD】2024年机试C、D真题集:最新的真题集题库 C/C++/Java/python/JavaScript

2024年C真题题集题库,有2种分数的题目列表,分别是100分的列表、200分的列表 从2023年11月开始,华为OD题目切换到C,基本上大概率会使用半年左右,要在2024年5月之前把这些题目都好好练习一下,可以得到很好的收获,基本上都是出的原题,提前恭喜大家都上岸。目前通过大大提供的真题练习,已经有上百人成功上岸了,而且大大还是一个老师,通过大大指导进入华为OD的学生已经有上千人了。 2024年5月之前,碰到原题的概率是98%以上。

十年以上编程经验的干货分享 2756

2026年华为od机试真题题库

OD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(EOD统一考试(E

面试高手的博客 19万+
上一篇: Redis的相关知识点总结
X..x.x
博客等级 码龄7年 2粉丝 8原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值