--------------以下是主题部分----------------------------------
可以选择一个子数组替换为整数MEX(b),首先我们知道如果选择的子数组中没有0,那么所有数会被替换为0,相反,如果选择的子数组中有0,那么所有数会被替换成一个正整数,问最少操作几次可以把所有数替换为0。
- 我们可以简单地发现如果原数组都为0,那么操作次数为0。
- 如果数组中有为0的数且连成一块,那么我们只需要把所有数都替换成0即可,操作次数为1。
- 如果数组中不为0的数没有连成一块,那么我们可以选择除边缘非0整数之外的数替换成一个正整数,在把整块非0整数都替换成0,操作次数为2。
------------以下是代码部分-------------------------------------
using namespace std;
int a[55];
int n;
int main(){
int t;
cin>>t;
while(t--){
cin>>n;
int tot=0;
int flag=0;
int flag2=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]==0) tot++;
if(flag&&a[i]!=0&&a[i-1]==0) flag2=1;
if(a[i]!=0&&a[i-1]==0) flag=1;
}
if(tot==n) cout<<0<<endl;
else{
if(flag==1&&flag2==1) cout<<2<<endl;
else cout<<1<<endl;
}
}
return 0;
}
-----------------以下是反思部分-----------------------
需要发现数组的特殊性,用贪心思想选择最小的次数。