zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Linux学习路径 -- 1、文件目录操作命令
    第一次认识Postman
    接口测试的基础理论
    浅浅记录一哈HTTP接口
    Linux 的安装和使用
    QTP11 安装笔记:win10
    fiddler的下载安装与配置
    adb 下载安装
    maven 下载 安装 环境配置
    idea 2018.3.4安装破解
  • 原文地址:https://www.cnblogs.com/long98/p/10352248.html
Copyright © 2011-2022 走看看