转自博客:http://blog.chinaunix.net/uid-24922718-id-4848418.html

尺取法就是两个指针表示区间[l,r]的开始与结束

然后根据题目来将端点移动,是一种十分有效的做法。适合连续区间的问题

poj3061

给定长度为n的数列整数a0,a1,a2,a3 ..... an-1以及整数S。求出综合不小于S的连续子序列的长度的最小值。如果解不存在,则输出0。

这里我们拿第一组测试数据举例子,即 n=10, S = 15, a = {5,1,3,5,10,7,4,9,2,8}

这幅图便是尺取法怎么“取”的过程了。

  整个过程分为4布:

    1.初始化左右端点

    2.不断扩大右端点,直到满足条件

    3.如果第二步中无法满足条件,则终止,否则更新结果

    4.将左端点扩大1,然后回到第二步

用尺取法来优化,使复杂度降为了O(n)。

最后,再给一个尺取法的定义以便更好理解:返回的推进区间开头和结尾,求满足条件的最小区间的方法称为尺取法。

#include <stdio.h>
int a[];
int main()
{
int n, n1, S, ans, z, y, i, t, s, sum;
scanf("%d", &n);
while(n--)
{
scanf("%d%d", &n1, &S);
for(sum=,i=;i<=n1;i++)
scanf("%d", &a[i]); ans = n1;
sum=;
s = t = ;
while()
{
while(t<=n1&&sum<S)
sum += a[t++];
if(s==&&t>n1&&sum<S)
{
ans=;
break;
}
if(sum<S)
break;
if(ans>t-s)
ans = t-s;
sum -= a[s++];
}
printf("%d\n", ans);
}
return ;
}

最新文章

  1. Oracle常用的SQL方法总结
  2. Google V8编程详解(三)Handle &amp; HandleScope
  3. SVN标准命令
  4. Codeforces 741A:Arpa&#39;s loud Owf and Mehrdad&#39;s evil plan(LCM+思维)
  5. 对于syncedmen类的代码分析
  6. OSPF(Open Shortest Path First开放式最短路径优先 -链路状态路由协议
  7. mac 下周期调度命令或脚本
  8. Websense更名换帅
  9. Css Div半透明
  10. JAXB--学习1
  11. 性能计数器自动收集-logman
  12. ZOJ 1633
  13. JavaScript--------------------jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画
  14. Redis-消息发布与订阅
  15. 实战ELK(9) Elasticsearch地理位置
  16. Hadoop2.0 Namenode HA实现方案
  17. Vue系列之 =&gt; 评论功能(小知识点串联)
  18. guava常用
  19. ImportTsv-HBase数据导入工具
  20. 深入研究嵌入式web服务器的视频监控应用

热门文章

  1. Spark K-Means
  2. 二项分布 多项分布 伽马函数 Beta分布
  3. C# 文件读取(二)
  4. 对linux的根目录执行强制递归移除
  5. 【sublime】解决汉字输入的办法——InputHelper;在sublime中输入汉字==》InputHelper方法
  6. 操作系统,windows编程,网络,socket
  7. V4L2读取摄像头程序流程【转】
  8. Backup: Numbers in Perl6
  9. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.2.更换主题
  10. 使用ResourceBundle访问资源文件(properties)帮助类