arrays - MEX 大于或等于 k 的最小长度子数组
解决方案
您可以使用带有滑动窗口技术的二进制搜索。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool go(int mp[],int k)
{
for(int i=0;i<k;i++)
{
if(mp[i]==0)
return false;
}
return true;
}
bool check(vector<int> &a,int m,int k)
{
int mp[1002]={0};
for(int i=0;i<m-1;i++)
mp[a[i]]++;
for(int i=m-1;i<a.size();i++)
{
mp[a[i]]++;
if(go(mp,k))
return true;
mp[a[i-m+1]]--;
}
return false;
}
void solve()
{
int n,k;
cin>>n>>k;
vector<int> a(n);
for(int i=0;i<n;i++)
cin>>a[i];
int low=k,high=n,ans=1e9;
while(low<=high)
{
int mid=(low+high)/2;
if(check(a,mid,k))
{
ans=min(ans,mid);
high=mid-1;
}
else
low=mid+1;
}
cout<<(ans==1e9?-1:ans)<<'\n';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
solve();
return 0;
}
输出:
5 3
4 2 4 1 0
推荐阅读
- python - Redis 连接返回 UnicodeError
- sql - 如何通过 BigQuery 中的依赖匹配键连接两个表?
- magento - Magento 电子邮件模板,新货件
- android - 如何检查 MotionScene 是否处于过渡“开始”或“结束”?
- r - ggplot2 函数中的平均值和中值箱线图图例
- javascript - 当输入是属性值 Javascript 的数组时,从 Array 对象中删除具有相同属性值的对象
- python - 在熊猫数据框中移动和恢复多行
- flutter - 使用 image_picker_web (FLUTTER-WEB) 加载微调器
- angular - 日期范围过滤不填充表格角度材料
- angular - 生产模式下的 Nebular NbRoleProvider 问题