2018網易前端實習筆試題

前端時間做了網易前端實習的筆試題,偶像想起,總結一下,前面的選擇題,我就不一一細說了,主要考察的是對於前端的基礎,以及計算機基礎,這次主要講下算法題。所有算法我均用js所寫,不同語言思路均相同。
(以下都是我對題目的簡述)
1.小易學了集合,已知集合有三個性質:確定性、互異性、無序性,現有以下算式這裏寫圖片描述
輸入x,y,z,w確定集合內元素的個數。
這裏寫圖片描述
input:1,2,3,4
output:4

首先拿到這題,可以看到集合的特性,其中最重要的就是這個確定性,說的就是不能重複,我就想到了數組去重,按着這個思路下去,我便找到了解題的思路。上代碼,算法實現都是在node環境下。例如,將以下代碼保存爲array.js ,執行node array.js。輸入四個數字,遇到換行爲結束。

process.stdin.resume(); 
process.stdin.setEncoding('ascii'); 

var input = ""; 
var input_array = ""; 

process.stdin.on('data', function (data) { 
    input += data; //接受到的輸入
    chunk = data.slice(0,-2);
    if(chunk === ""){//遇到空字符執行end
        process.stdin.emit('end');
        return
    }
}); 

process.stdin.on('end', function () { 
    input_array = input.split("\n"); 將輸入的以換行符進行分割
    var s = input_array[0];//取第一行
    s = s.split(' ');以空格進行分割輸入的字符
    var count=[];//空數組
    var a = parseInt(s[0]);var b = parseInt(s[1]); var c = parseInt(s[2]);var d = parseInt(s[3]); //保存輸入的數字
    for(var i = a;i<=b;i++){
        for(var j = c;j<=d;j++){
            var num = i/j;
            if(count.indexOf(num)===-1){//檢查空數組是否含有當前數字
               count.push(num);
            }
        }
    }

    console.log(count.length);
});

2.小易生活的世界沒有除號,而且所有的運算都是從左往右依次進行計算
input: 3+6*5
output: 45

我想的就是首先讓他第一次運算直接執行,如果後面還有字符,那就判斷間隔判斷符號,依次進行計算

process.stdin.resume(); 
process.stdin.setEncoding('ascii'); 

var input = ""; 
var input_array = ""; 

process.stdin.on('data', function (data) { 
    input += data; 
    chunk = data.slice(0,-2);
    if(chunk === ""){
        process.stdin.emit('end');
        return
    }
}); 

process.stdin.on('end', function () { 
    input_array = input.split("\n"); 
    var s = input_array[0];
    s = s.split('');
    var data=0;
    if(s[1]=='*'){
        data = parseInt(s[0])*parseInt(s[2]);
    }else if(s[1]=='+'){
        data = parseInt(s[0])+parseInt(s[2]);
    }else{
        data = parseInt(s[0])-parseInt(s[2]);
    } 
    if(s.length>4){
        for(var i=3;i<s.length-1;i=i+2){
            if(s[i]=='*'){
                data = data*parseInt(s[i+1]);
            }else if(s[i]=='+'){
                data = data + parseInt(s[i+1]);
            }else{
                data = data - parseInt(s[i+1]);
            } 
        }
    }
    console.log(data);
});

3.有一串數字。如下,去重,並且取重複數字的最後一次出現位置。並輸出。
input:100,99,99,100,99,100,100
output:99,100
乍一看這題還是蠻簡單,我想着,這不是直接將序列倒敘一下,再進行排序不就好了嗎,其實並不是這樣。
我的思路是,新建一個數組a,讀取當前數組b中的一個數字,查詢新數組a中是否含有這個數字,如果不存在,就查詢當前數組b這個數字的最後的索引。將新建數組a的與b中相同索引的位置插入此數字,這樣。就直接能排好序列了,而且還能去重複,最後將數組中的空位置去掉。



process.stdin.resume(); 
process.stdin.setEncoding('ascii'); 

var input = ""; 
var input_array = ""; 

process.stdin.on('data', function (data) { 
    input += data; 
    chunk = data.slice(0,-2);
    if(chunk === ""){
        process.stdin.emit('end');
        return
    }
}); 

process.stdin.on('end', function () { 
    input_array = input.split("\n"); 
    var s = input_array[1];
    s = s.split(' ');
    s[s.length-1] = s[s.length-1].replace('\r','');
    var a = [];
    for(var i =0;i<s.length;i++){
        // console.log(a.lastIndexOf(s[i]));
        if(a.indexOf(s[i])===-1){//查詢是否含有數字
            var num = s.lastIndexOf(s[i]);查詢最後的索引
            a[num] = s[i];
        }
    }
    console.log(a.join(' ').replace(/\s+/g, ' ').trim());//此步驟是爲了去除空格,爲了和最後的輸出的格式相同。
});

除了以上算法題目最後還有一題js的demo題
有以下表格。點擊成績能夠使表格按成績從高到底排序。
這裏寫圖片描述

此題的方法就查看我之前的一篇博客
http://blog.csdn.net/blueblueskyhua/article/details/68929578

發佈了41 篇原創文章 · 獲贊 80 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章