阿里 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的大小应该是很大的。
#笔试题目##阿里巴巴#