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)
相关推荐
技道两进5 天前
使用深度神经网络进行时间序列分析之数据窗口
深度学习·tensorflow·时间序列预测·滑动窗口·数据窗口
Tisfy6 天前
LeetCode 3013.将数组分成最小总代价的子数组 II:两个堆维护k-1小 + 滑动窗口
算法·leetcode·题解·优先队列··有序集合·滑动窗口
睡不醒的kun10 天前
不定长滑动窗口-求子数组个数
数据结构·c++·算法·leetcode·职场和发展·双指针·滑动窗口
睡不醒的kun14 天前
不定长滑动窗口-基础篇(2)
数据结构·c++·算法·leetcode·哈希算法·散列表·滑动窗口
沉默-_-15 天前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
睡不醒的kun15 天前
定长滑动窗口-基础篇(2)
数据结构·c++·算法·leetcode·职场和发展·滑动窗口·定长滑动窗口
燃于AC之乐19 天前
我的算法修炼之路--8——预处理、滑窗优化、前缀和哈希同余,线性dp,图+并查集与逆向图
算法·哈希算法·图论·滑动窗口·哈希表·线性dp
minhuan22 天前
大模型应用:稀疏注意力 vs 滑动窗口:大模型扩窗技术完全解析.58
滑动窗口·大模型应用·稀疏注意力·大模型扩窗技术
老鼠只爱大米1 个月前
LeetCode算法题详解 76:最小覆盖子串
算法·leetcode·双指针·滑动窗口·最小覆盖子串·minwindow
老鼠只爱大米1 个月前
LeetCode算法题详解 239:滑动窗口最大值
算法·leetcode·双端队列·滑动窗口·滑动窗口最大值·单调队列