D - Disastrous Downtime(双指针问题)

该程序使用C++实现,通过双指针法解决寻找数组中最大间隔子区间的题目。首先对数组进行排序,然后用两个指针逐步扩大区间,直到找到的最大间隔满足条件或遍历完整个数组。最后计算满足条件的子区间数量并输出。

题目链接










































思路:实质上就是用双指针找区间最大间隔问题  本来想首指针弄完后直接到达尾指针的位置  但是不对  中建还有很多数需要 做   然后感觉首指针从前往后逐渐便利一下就对了  (注意一i啊for循环和while循环的条件)

#include<bits/stdc++.h>

using namespace std;

const int N =1e5+10;


int a[N];
int main()
{

    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a[i];
    int max1=0;
    sort(a,a+n);//还得排序
    for(int i=0,j=1;i<n;i++)//设置双指针
    {
        while(a[j]-a[i]<1000&&j<n) j++;//找最大区间间隔  注意判断条件
        max1=max(max1,j-i);//那个多加了一在这里少一个加一
        if(j>=n-1) break;//到最后结束
    }
    int res=0;
    if(max1%m) res++; //有多余的答案还得加一
    res+=max1/m;
    cout<<res<<endl;
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值