web前端开发面试算法题(应届生)-- js篇

前言

        如今的很多互联网公司,尤其是一些大公司总喜欢出各种算法题,考察程序员的逻辑思维能力。这是本人参加应聘时做过的面试题目,还有一些是网上收集的在面试时出现率比较高的算法题,现在拿出来跟大家一起分享,希望对一些前端开发应聘者能带来一些帮助,面试时即使做的题目跟这些不一样,但是这些做题的思想都是通用的。

 

题目1:

这是一个9*9的乘法口诀表,是完全用算法生成的,下来请用javascript完成生成一个这样的乘法口诀表,要求和图片一模一样,注意边框,注意字体,注意一切细节,不允许使用table。

《web前端开发面试算法题(应届生)-- js篇》

说明:使用document.write()创建HTML标签并添加class;通过递归方法成一个9*9乘法表;再使用css给乘法表添加样式,使其变成等腰三角形。(关于边框重叠的问题,可以通过设置margin为负值来消除)

JavaScript代码:

document.write("<div class='box'>");		//最外层div
for (var i=1; i<=9; i++) {			//行
    document.write("<div>");		
    for (var j=1; j<=i; j++) {		        //列	
        document.write("<span class='column'>"+ i + "×" + j + "=" + i*j + "</span>");
    }
    document.write("</div>");
}
document.write("</div>");

CSS代码:

.box {
     text-align: center;
 }
 .column {
     display: inline-block;
     width: 51px;
     height: 17px;
     font-size: 12px;
     border: 1px solid #E2E2E2;
     margin-right: -1px;
     margin-bottom: -1px;
     padding: 5px 10px;
}

 

题目2:

通过一个输入框,输入一个自定义的数组,例如1,4,5,23,2,17,24,10000000。请把他按照中间高两边低进行排序,最后的结果是1,4,5,23,10000000,24,17,2,算法越准确越好,请注意左右翼数据数据的平衡性。

分析:应该分情况处理。1、如果数组的长度为偶数,则直接分为两组,第一组从小到大排序,第二组从大到小排序,两组拼接输出。 2、如果数值的长度为奇数,取出最大那个数,剩下的偶位数数组进行1操作,然后得到的两个数组跟最大那个数拼接输出。(有更好的方案,求分享)

JavaScript代码:

var cont = prompt("请输入一个数组,并用英文逗号隔开");
var arr = cont.split(",");
var arr1=[];
var arr2=[];
var max =Math.max.apply(null, arr);
if (arr.length%2==0) {			        //偶数
    arrSplit(arr,arr1,arr2);			//调用排序函数	
    document.write(arr1.concat(arr2));	        //拼接arr1和arr2数组
} 
else{						//奇数
    arr.sort(function(a, b){			//对数组进行排序
        return b-a;
    });				
    var newArr = arr.slice(1);	                //除掉最大一个的数,得到偶位数的数组					
    arrSplit(newArr,arr1,arr2)				
    arr2.unshift(max);	                        //把最大那个数插入arr2	
    document.write(arr1.concat(arr2));
    }
			
function arrSplit(arr,arr1,arr2){		//封装一个对偶数位数组进行分割和排序的函数			
    var Array = [];				//定义一个数组用于存放arr1和arr2的返回值
    for (var i=0; i<arr.length/2; i++) {        //拆分成两个数组
        arr1[i]= arr[i];				
        arr2[i]= arr[i+arr.length/2];			
    }			
    arr1.sort(function (a, b){		        //升序
        return a-b;				
    });
    arr2.sort(function (c, d){                  //降序    
        return d-c;				
    });
    Array[0]=arr1;
    Array[1]=arr2;
    return Array;                               //返回arr1和arr2数组
}

 

题目3

去掉一个数组中的重复项,并按升序排序。

方法一:常规方法

function test(arr) {
    var result = [];
    for (var i=0,len=arr.length; i<len; i++) {
        if ( result.indexOf(arr[i]) == -1 ){
            result.push(arr[i]);
        }
    }
    return result.sort(function (a,b) {
        return a-b;
    });
}
console.log(test([10,1,3,5,5,8]));        //输出:[ 1, 3, 5, 8, 10 ]

方法二:ES6方法,使用set去重

function f(arr) {
    let newArr = [...new Set(arr)];
    return newArr.sort(function (a,b) {
        return a-b;
    })
}
console.log(f([10,1,3,5,5,8]));

 

题目4

原生js实现斐波那契数列。

说明:斐波那契数列,以兔子的繁殖的例子而引入,故又称“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…;在数学上,斐波那契数列以如下被以递归的方法定义:F(1)=1, F(2)=1, F(n)=F(n-1)+F(n-2)  (n>2,n∈N*)。

方法一:递归方法

function f(n) {
    if ( n==1 || n==2 ){
        return 1;
    }else{
        return f(n-1) + f(n-2);
    }
}
console.log(f(6));

方法二:动态规划方法(性能得到优化)

function fibonacci(n) {
    let n1 = 1,
        n2 = 1,
        sum = 1;
    for(let i = 3; i <= n; i += 1) {
        sum = n1 + n2;
        n1 = n2;    //往后移动一位数
        n2 = sum
    }
    return sum
}
console.log(fibonacci(5));

 

题目5

给定一个对象obj,输出obj第一项的值。

let obj = {
    name : "jack",
    age : 18,
    job : "Software Engineer"
};
let result = [];
for (let key in obj){
    result.push(obj[key]);
}
console.log(result[0]);

 

题目6

把一个线性结构数组转成树形结构数组。

请猛戳这里

 

题目7

给定一个字符串,每隔n个字符就用逗号隔开。

function splitStr(str, n) {
    let result = '';
    for(let i=0; i<str.length; i++){
        if(i%n==0){
            result += str.substring(i,i+n)+','
        }
    }
    return result.substring(0,result.length-1)    //去掉最后一个逗号
}
console.log(splitStr('4168468468485',3))    //输出:416,846,846,848,5

(持续更新)

查看更多js算法题:https://blog.csdn.net/mr_javascript/article/details/79779598

 

    原文作者:蔚莱先森
    原文地址: https://blog.csdn.net/Mr_JavaScript/article/details/79769572
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞