POJ 3061 Subsequence(尺取法)
题目链接: 传送门
题目描述
给定长度为n的数列整数以及整数S。求出总和不小于S的连续子序列的长度的最小值。如果解不存在,则输出0。
思路
O(nlogn)算法
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int N,S,i;
int ans[100005] = {0},sum[100005] = {0};
scanf("%d%d",&N,&S);
int res = N;
for (i = 0;i < N;i++)
{
scanf("%d",&ans[i]);
sum[i + 1] = sum[i] + ans[i];
}
if (sum[i] < S)
{
res = 0;
}
else
{
for (i = 0;sum[i] + S < sum[N];i++)
{
int tmp = lower_bound(sum + i,sum + N,sum[i] + S) - sum;
res = min(res,tmp - i);
}
}
printf("%d\n",res);
}
return 0;
}
O(n)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while (T--)
{
int N,S;
int ans[100005] = {0};
scanf("%d%d",&N,&S);
for (int i = 0;i < N;i++)
{
scanf("%d",&ans[i]);
}
int res = N + 1;
int sum = 0,t = 0,s = 0;
for (;;)
{
while (t < N && sum < S)
{
sum += ans[t++];
}
if (sum < S)
{
break;
}
res = min(res,t - s);
sum -= ans[s++];
}
if (res > N)
{
res = 0;
}
printf("%d\n",res);
}
return 0;
}
┆ 凉 ┆ 暖 ┆ 降 ┆ 等 ┆ 幸 ┆ 我 ┆ 我 ┆ 里 ┆ 将 ┆ ┆ 可 ┆ 有 ┆ 谦 ┆ 戮 ┆ 那 ┆ ┆ 大 ┆ ┆ 始 ┆ 然 ┆
┆ 薄 ┆ 一 ┆ 临 ┆ 你 ┆ 的 ┆ 还 ┆ 没 ┆ ┆ 来 ┆ ┆ 是 ┆ 来 ┆ 逊 ┆ 没 ┆ 些 ┆ ┆ 雁 ┆ ┆ 终 ┆ 而 ┆
┆ ┆ 暖 ┆ ┆ 如 ┆ 地 ┆ 站 ┆ 有 ┆ ┆ 也 ┆ ┆ 我 ┆ ┆ 的 ┆ 有 ┆ 精 ┆ ┆ 也 ┆ ┆ 没 ┆ 你 ┆
┆ ┆ 这 ┆ ┆ 试 ┆ 方 ┆ 在 ┆ 逃 ┆ ┆ 会 ┆ ┆ 在 ┆ ┆ 清 ┆ 来 ┆ 准 ┆ ┆ 没 ┆ ┆ 有 ┆ 没 ┆
┆ ┆ 生 ┆ ┆ 探 ┆ ┆ 最 ┆ 避 ┆ ┆ 在 ┆ ┆ 这 ┆ ┆ 晨 ┆ ┆ 的 ┆ ┆ 有 ┆ ┆ 来 ┆ 有 ┆
┆ ┆ 之 ┆ ┆ 般 ┆ ┆ 不 ┆ ┆ ┆ 这 ┆ ┆ 里 ┆ ┆ 没 ┆ ┆ 杀 ┆ ┆ 来 ┆ ┆ ┆ 来 ┆
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)