OD C卷 - 最多购买宝石数目

最多购买宝石数目(100)

  • 输入宝石数量n,随后n行输入每个宝石的价格;
  • 宝石可以同时出售0或者多个,多个时,宝石编号必须连续;
  • 对当前总面值v的钱,最多能购买多少个宝石,如无法购买返回0;

示例1

输入

7

8

4

6

3

1

6

7

10

输出

3

说明:

最多购买的宝石索引为2->4 或者3->5

示例2

输入

0

1

输出

0

示例3

输入

9

6

1

3

1

8

9

3

2

4

15

输出

4

示例4

输入

9

1

1

1

1

1

1

1

1

1

10

输出

9

思路:

  • 滑动窗口,从最大长度为n,依次递减,直到满足要求(连续和<= v);
python 复制代码
# 宝石总数
n = int(input().strip())

# 每个宝石的价格
price = []
for i in range(n):
    price.append(int(input().strip()))

# 总钱数
v = int(input().strip())

# 长度 从最大开始
length = n
label = False
while length > 0:
    for i in range(n - length + 1):
        temp = price[i:i+length]  # 分片效率低
        if sum(temp) <= v:
            label = True
    if label:
        break
    length -= 1

print(length)
 
  • 双指针+滑动窗口
python 复制代码
# 宝石总数
n = int(input().strip())

# 每个宝石的价格
price = []
for i in range(n):
    price.append(int(input().strip()))

# 总钱数
v = int(input().strip())

#
end = 0
start = 0
length = 0
total_used = 0
while end < n:
    total_used += price[end]
    while v < total_used:
        total_used -= price[start]
        start += 1

    length = max(end - start + 1, length)

    end += 1

print(length)
相关推荐
一直学习永不止步8 天前
LeetCode题练习与总结:至少有 K 个重复字符的最长子串--395
java·算法·leetcode·字符串·滑动窗口·哈希表·分治
Tisfy12 天前
LeetCode 3255.长度为 K 的子数组的能量值 II:和官解思路不同的O(n)做法(附思考过程)
数据结构·算法·leetcode·题解·遍历·滑动窗口
GGBondlctrl24 天前
【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!
网络·网络协议·tcp/ip·滑动窗口·流量控制·拥塞控制·tcp协议特性
搞笑症患者1 个月前
LeetCode Hot100 - 滑动窗口篇
算法·leetcode·滑动窗口
freephp1 个月前
细聊滑动窗口
滑动窗口
Trouvaille ~1 个月前
【优选算法篇】踏入算法的深邃乐章:滑动窗口的极致探秘
开发语言·数据结构·c++·算法·面试·滑动窗口·哈希表
中间件XL1 个月前
sentinel原理源码分析系列(六)-统计指标
sentinel·滑动窗口·指标统计
UestcXiye1 个月前
Leetcode 第 359 场周赛题解
c++·leetcode·动态规划·滑动窗口·数据结构与算法
ZachOn1y1 个月前
计算机网络:数据链路层 —— 可靠传输服务
网络·计算机网络·滑动窗口·数据链路层·可靠传输·超时重传
Espresso Macchiato1 个月前
Leetcode 3321. Find X-Sum of All K-Long Subarrays II
leetcode·滑动窗口·leetcode hard·leetcode 3321·leetcode周赛419