最多购买宝石数目(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)