• C++尺取法


    个人笔记,仅供复习

    1.概念:返回推进区间的开头和结尾,求满足条件的最小区间的方法称为尺取法。所谓尺取法,顾名思义,就是像一把尺子(固定某一条件),不断向右(左)移动,不断更新所求答案。一般用来求满足条件的最小区间。

    2.实现步骤:

    1. 初始化左右端点
    2. 不断扩大右端点,直至满足条件
    3. 如果直至终点也无法满足条件,则终止,否则更新结果
    4. 扩大左端点(右移1),跳回步骤2

    3.例题:给定一个整数S,求一个长度为n的序列(所有元素均为正整数)中总和不小于S的连续子序列的长度的最小值,如果不存在,则输出0。

    3.1 解析:假设输入n=10,s = 15.然后给出一个包含十个元素的数组:5 1 3 5 10 7 4 9 2 8.


    3.2 代码实例:

    #include<iostream>
    const long long inf = 10e8;
    using namespace std;
    int main()
    {
    	int n,ans = inf;
    	long long s;
    	cin >> n >> s;
    	int a[n];
    	int b = 0, e = 0,sum = 0;
    	for(int i = 0;i < n;i++)	cin >> a[i];
    	while(true){
    		while(e < n && sum < s)	sum += a[e++];
    		if(sum < s)	break;
    		ans = (e-b) < ans?(e-b):ans;
    		sum -= a[b++];
    	}
    	if(ans == inf)	ans = 0;
    	cout << ans << endl;
    	return 0;
    }

  • 相关阅读:
    .net网络编程(4)TcpListener、TcpClient
    Win32 窗口篇(1)
    Win32 窗口篇(3)
    JS数组定义
    asp的RegExp对象正则表达式功能用法
    Javascript 面向对象全新理练之数据的封装
    asp 正则表达式
    PPK 谈 JavaScript 的 this 关键字
    JavaScript 接收键盘指令示例
    javascript事件列表解说
  • 原文地址:https://www.cnblogs.com/long98/p/10352248.html
Copyright © 2020-2023  润新知