• 尺取法连续子序列


    【试题描述】

    给定长度为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;
    }

     

  • 相关阅读:
    Qt学习之路,part1
    1.获取状态栏的高度
    如何在Android Studio中上传代码到Gitee上
    关于类图
    外观模式
    关于类的实例
    SharedPreference中关于editor.apply()和editor.commit()
    活动的4种启动模式
    unittest中case批量管理
    unittest使用
  • 原文地址:https://www.cnblogs.com/4D24/p/9377019.html
Copyright © 2020-2023  润新知