题解:蓝桥云课 1372 美丽的区间

【题目来源】

蓝桥云课:1.美丽的区间 - 蓝桥云课 (lanqiao.cn)

【题目描述】

给定一个长度为 \(n\) 的序列 \(a_1,a_2,\dots,a_n\) 和一个常数 \(S\)

对于一个连续区间如果它的区间和大于或等于 \(S\),则称它为美丽的区间。

对于一个美丽的区间,如果其区间长度越短,它就越美丽。

请你从序列中找出最美丽的区间。

【输入】

第一行包含两个整数 \(n, S\),其含义如题所述。

接下来一行包含 \(n\) 个整数,分别表示 \(a_1,a_2,\dots,a_n\)

【输出】

输出共一行,包含一个整数,表示最美丽的区间的长度。

若不存在任何美丽的区间,则输出 \(0\)

【输入样例】

5 6
1 2 3 4 5

【输出样例】

2

【算法标签】

《蓝桥云课 1372 美丽的区间》 #双指针#

【代码详解】

n, S = map(int, input().split())
a = list(map(int, input().split()))
#找最短区间满足区间之和>=S
min_len = n+1
#[left, right)
left, right = 0, 0
#tot表示滑动窗口[left, right)之间的区间和
tot = 0
while left<n:
    #不断扩展右端点,直至区间之和>=S
    while right < n and tot < S:
        tot += a[right]
        right += 1
    if tot >= S:
        #[left, right)
        min_len = min(min_len, right - left)
    #左端点往右走1步
    tot -= a[left]
    left += 1
if min_len == n+1:
    min_len = 0
print(min_len)

【运行结果】

5 6
1 2 3 4 5
2
posted @ 2026-03-04 15:09  团爸讲算法  阅读(0)  评论(0)    收藏  举报