选择题
1. var arr = []; typeof arr的结果是( C )
A. array
B. function
C. object
D. undefined
2. 若一棵二叉树的先序遍历序列为abdgcefh,中序遍历的序列为dgbaechf,则后序遍历的结果为( D )
A. gcefha
B. gdbecfha
C. bdgaechf
D. gdbehfca
3. a = 8, b = 7, a^b<<2的值是 ( D )
A. 0
B. 15
C. 23
D. 20
先左移运算再异或运算
4. 如下选项为关于排序算法的时间复杂度和稳定性的说明,其中正确的选项是?( CD )
A. 堆排序O(nlog2n)稳定
B. 快速排序O(nlog2n)稳定
C. 归并排序O(n)稳定
D. 基数排序O(n)稳定
E. 冒泡排序O(n2)不稳定
冒泡,插入,归并,基数,这四个是稳定
5. 一颗完全二叉树的节点数量为666,那么这棵树上的叶子节点数为( B )
A. 334
B. 333
C. 332
D. 666
完全二叉树节点数N 和叶子节点数M 的关系是: M = N / 2 或 M = (N + 1) / 2
6. 用两个栈模拟一个队列,如果栈的容量分别是N和M(N>M),那么模拟实现的队列最大容量是多少?( C )
A. N+M
B. 2N+1
C. 2M+1
D. 2N-1
队列是FIFO,所以应该是容量小的栈,可以装满2次再加队列尾
7. 正整数9^8^7^6^5^4^3^2^1 的最后三位数字是什么?这里的^是幂的意思( C )
A. 441
B. 561
C. 721
D. 841
E. 631
8. 谢老师生日是A月B日,他将A告诉了小明,将B告诉了小强,生日可能的日期有:
2月2日,2月5日, 2月9日
3月2日,3月7日
6月1日,6月5日
9月1日,9月3日,9月9日
小明和小强都非常聪明且诚实,而且约定不能互相透露,于是发生了如下对话
小明说:我不知道老师的生日是什么时候,小强也不可能知道
小强说:原来我不知道,但是现在我知道了
小明说:我也知道了
老师的生日是哪一天:( D )
A. 3月7日
B. 9月3日
C. 2月2日
D. 6月1日
E. 2月9日
小明知道小强不知道,所以不会是7日和3日,因为这两个日期都是唯一的。那么就不可能是3月和9月了。 小强原来不知道,因为有小强知道的日期不是唯一的。但是小强现在知道了,说明排除了3月和9月后,小强知道的日期变成唯一的了,所以只能是6月1日。
简答题
1. 一个数组a = [],其中包含随机的正整数,元素连续,且长度为n,请写一段程序,剔除其中的值为偶数的项,要求返回一个只包含奇数元素,元素连续且元素间顺序保持不变的数组。比如a = [1, 4,7,9,2] 返回 [1 7, 9]
时间复杂度越低越好,如果不创建新数组可加分
方法1
let a = [1,4,7,9,2]
let r = []
let rl = 0
for (let i = 0; i < a.length; i++) {
if (a[i] % 2 != 0) {
r[rl++] = a[i]
}
}
return r;
方法2
let a = [1,4,7,9,2]
for (let i = a.length -1 ; i >= 0; i--) {
a[i] % 2 == 0 && a.splice(i, 1)
}
2. js实现快排
function quickSort(arr, left, right) {
let p = (left + right) / 2
let value = arr[p]
let i = left
let j = right
while(i < j) {
for (i; !(i >= p || value < arr[i]); i++) {}
if (i < p) {
arr[p] = arr[i]
p = i
}
for (j; !(j <= p || value > arr[j]); j--) {}
if (j > p) {
arr[p] = arr[j]
p = j
}
}
arr[p] = value
if (p > left) {
quickSort(data, left, p - 1)
}
if (p < right) {
quickSort(data, p + 1, right)
}
}
3. 一个桶,里面有黑白球各99个,按照以下规则把球取出:
(1)每次取出两个球
(2)如果是两个同色的球,就放回一个黑球
(3)如果是两个异色的球,就放回一个白球
问:最后桶里剩下一个黑球的概率是多少?(请给出思路,逻辑推导或者代码解析均可)
概率为0,因为白球总是剩下奇数,黑球总是剩下偶数