记录一下为啥被卡了半个小时
原题链接登录—专业IT笔试面试备考平台_牛客网
完整代码
#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[100000];
int h;
int l;
bool panduan(int x){
for(int i = l;i<=h - 1;i++){
if(a[i]==x) return false;
}
return true;
//在存储里面返回false
//不在里面返回true
}
int main(){
cin>>m>>n;
int ans = 0;
int cnt = 0;
ans+=m;//先假设储存能占满 此时ans = 1;
h = 1;//维护内存的尾部
l = 1;//维护内存的头部
int k2 = 1;
while(n--){
int o = 1;
int x;
cin>>x;
if(h<=m&&panduan(x)){
a[h++] = x;
}
else if(h>m&&panduan(x)){
ans++;
a[l] = -1;
l++;
a[h] = x;
h++;
}
}
if(h<m+1) cout<<h-1<<endl;
else cout<<ans<<endl;
//cout<<ans<<endl;
//不能忽略了另一种情况 有的根本就占不满外存储
return 0;
}
错误的原因:有的数据是0,这样在panduan函数中如果还用i<=h的话就正好会误判,因为此时a[h]没有输入数据。这样的话结果会比正确答案小,只能过60%的数据
竟然让这么个小错误折磨了我半个小时**&^&*&#*?^&&^