zoukankan      html  css  js  c++  java
  • 尺取法连续子序列

    【试题描述】

    给定长度为n的正整数数列A(A1, A2, ... , An)以及正整数S,求出总和不小于S的连续子序列的长度的最小值。如果解不存在,则输出0。

    【输入】

    第一行两个整数N和S,第二行包括n个正整数表示数列A,两两之间用空格分隔。 

    【输出】

    一个符合题目要求的整数。

    【输入示例】

    5 11
    1 2 3 4 5 

    【输出示例】

    3

    【其他说明】 

    数据范围:10 < N < 10^5,0 < Ai < 10^4+1,S < 10^8.

    【思路】

     

     

    先往前面加数,如果总和大了从后边减数,通过记录每组数据比较大小得出最优的解

    【代码】

      

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[100000];
    int main()
    {
        int n,s,sum=0,cnt=0,cntt=INT_MAX;
        int i,j;
        cin>>n>>s;
        for(i=0;i<n;i++)
        cin>>a[i];
        i=0;j=0;
        sum=a[0];
        cnt=1;
        while(i<=j&&j<n)
        {
            if(sum<s)
            {
                j++;
                sum+=a[j];
                cnt++;
            }
            else
            {
                cntt=min(cnt,cntt);
                sum-=a[i];
                cnt--;
                i++;
            }
        }
        if(cntt==INT_MAX)
        {
            cout<<0;
        }
        else cout<<cntt;
        return 0;
    }

     

  • 相关阅读:
    字符串
    Flume集群搭建
    hbase测试搭建
    hadoop2.0测试环境安装
    kafka集群报错
    kafka集群安装
    hadoop环境配置
    zookeeper安装
    虚拟机时间同步14 Aug 04:09:18 ntpdate[2941]: no server suitable for synchronization found
    python numpy中数组.min()
  • 原文地址:https://www.cnblogs.com/4D24/p/9377019.html
Copyright © 2011-2022 走看看