【爱奇艺2018秋季校招前端工程师(第一场)】 试题回顾

一、选择题

并非原顺序

1. 元素隐藏的CSS代码: display: none;

2. textarea的html代码怎么写?  <textarea>还是<input type='textarea'>? 前者。

3. DOM元素的父节点? parent、parent()、parentNode()、parentNode? 最后一个。

4. UML用什么表示系统需求?—— 用例图

5. 下面的代码输出什么?—— 10

var a=2;
function f() {
    var a=10;
    var c=eval;
    c(console.log(a));
}
f();


6. 下面的代码输出什么?—— 10个10

for(var i=0;i<10;i++){
    setTimeout(function () {
        console.log(i);
    },1000)
}

8. 关于选择排序说法正确的是? 
空间复杂度O(1)”和“优于冒泡排序”感觉都对,我选了前者。

9. 字符串ABCDADA用霍夫曼编码后需要多少位表示?

如下图,四个字母的出现频率从小到达为1(B)、1(C)、2(D)、3(A),根结点到各字母的路径为3(B)、3(C)、2(D)、1(A),则总共需要1×3+1×3+2×2+3×1=13位。



二、编程题

/*
    题目1:最大周长
    用三根木棍组成一个三角形,若组不成则削去其中一根的一段(整数),问能组成的三角形的最大周长。
 */
// 三角形的任意两边之和一定大于第三边,只需要满足较小的两个边长之和大于最大的边长即可
var a=1,b=2,c=3;
var arr=[];
arr.push(a);
arr.push(b);
arr.push(c);

// 找到最小、中间、最大的边长
arr.sort(function(a,b){return a-b;});

var min=arr[0], mid=arr[1], max=arr[2];

while(min+mid<=max){ // 如果较小的两个边长之和不大于最大的边长
    max--;  // 最大边长削去1
}

var res=min+mid+max;
console.log(res);

/*      说明: 这题没有完全通过。 有更好的解法请告知~~
        题目2:
        有若干个箱子排成一排,每个箱子的颜色为红色(R)或绿色(G),小牛有红绿两种颜色的漆,可以将箱子的颜色改变。
        求最少需要刷几个箱子才能使红色的箱子总是比绿色的箱子更靠近左边?

        输入是仅有'R'和'G'组成的字符串,输出需要改变颜色的箱子的最少数目。

        比如:输入 s='RGRGRG',应该刷成'RRRGGG',输出:2
 */
function minChange(s) {
    var res=0; // 最终输出

    var allGnum=0, allRnum=0;

    for(var i=0;i<s.length;){
        var Gnum=0, Rnum=0;
        if(s[i]==='R'){

            var j=i-1;
            while (s[j]==='G'&&j--){
                Gnum++;
            }

            var k=i;
            while (k<s.length && s[k]==='R'){
                k++;
                Rnum++;
            }

            if(!Gnum) // 减去开头的R
                Rnum=0;

            allGnum+=Gnum;
            allRnum+=Rnum;

        }

        if(Rnum){
            i+=Rnum;
        }else {
            i++;
        }

        // 将Gnum和Rnum重置为0,因为js没有块作用域
        Gnum=0;
        Rnum=0;
    }

    res=allGnum<=allRnum?allGnum:allRnum;

    return res;
}
//var s='RGRGGGGRRG'; // 3
//var s='RGRGRG'; // 2
//var s='RRGGRGRR'; // 3
//var s='G'; // 0
//var s='RGRGRGRG'; // 3  (将除了第一个之外的所有R修改为G即可)
var s='RRGRRGGRGRG'; // 4  (有问题!应该是3个就够了...)//
console.log(minChange(s));


/*
        试题3: 大数的比较
 */
var x1=1010,k1=3,x2=101010,k2=2;
var v1='', v2=''; // 用字符串保存大数
for(var i=0;i<k1;i++){
    v1=v1.concat(x1.toString());
}

for(var j=0;j<k2;j++){
    v2=v2.concat(x2.toString());
}

// 长度大的对应的值也大
if(v1.length>v2.length){
    console.log("Greater");
}else if(v1.length<v2.length){
    console.log("Lesser");
}else{ // 长度相等,则可以直接比较字符串
    if(v1>v2){
        console.log("Greater");
    }else if(v1<v2){
        console.log("Lesser");
    }else {
        console.log("Equal");
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值