某面试题

219 阅读3分钟

选择题

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,因为白球总是剩下奇数,黑球总是剩下偶数