写一个函数判断一个int类型的数组是否是有效的。
所谓有效是指:假设数组大小为n,那么这个int数组里的值为0~n-1之间的数,并且每个数只能出现一次,否则就是无效数组
典型的空间换时间
开个大数组,遍历一遍,每次数量加1,若加前不为0就不是
void output(int *arr, int num) {
for(int i=0;i<num;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
int judge(int *arr,int n) {
int *tmp = new int[n];
memset(tmp,0,sizeof(int)*n);
output(tmp,n);
for(int i=0;i<n;i++) {
if(arr[i] > n || arr[i] < 0 || tmp[arr[i]]) {
delete []tmp;
return 0;
} else {
tmp[arr[i]]++;
}
}
output(tmp,n);
delete []tmp;
return 1;
}