阿里 2020/7/22笔试题(三面炸,被boss怼懵了
1. 给定一个n,求[1,n]这n个数字的排列组合有多少个。条件:相邻的两个数字的绝对值不能等于1
思路:简单的回溯算法,注意保存上一次访问的位置用于判定绝对值
void getNum(int* visit, int* result,int n, int last, int size){
// 满足条件
if (size == n ){
for (int i = 0; i < n; i++){
printf("%d ", result[i] + 1);
}
printf("
");
return;
}
//寻找一个没有被访问的
for (int i = 0; i < n; i++){
if (!visit[i]){
if (last != -1){
if (getAbs(last - i) == 1){
// 不访问
continue;
}
}
// 置为已访问
visit[i] = 1;
result[size] = i;
getNum(visit, result,n, i, size + 1);
visit[i] = 0;
}
}
} 2. 给定一个数组a,数字m,求在数组a中 连续子数组中的某个元素的出现个数>=m的子数组个数。
没a出来就不讲思路了,求各位大佬指点。具体a的大小应该是很大的。
#笔试题目##阿里巴巴#
查看24道真题和解析