牛客前端编程题(日记,代码待改进)

牛客前端编程题(日记,代码待改进)

1.在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组。原题图:

  答案 1:

function append(arr, item) {
     var arr1 = new Array();
    for(var i=0;i<arr.length;i++){
        arr1.push(arr[i]);
    }
    arr1.push(item);
    return arr1;
}

思路:刚开始直接创建了新数组直接赋值,但其实由于是引用变量,所以指向的事同一个地址空间,所以修改时也改了原地址arr,不符合题意,于是采用按个push arr值得方法,最后成功(ps:最后要return 一下,否则会报错)。

这个运行时间:186ms,占用内存:15344k

答案2:



function append(arr, item) {
    var arr1 = arr.slice(0);
    arr1.push(item);
    return arr1;
}

思路:js高级教程P94页,使用slice(start, end)来拷贝数组,它能够基于当前数组创建一个或多个新数组。只有一个参数时,从设置的参数位取到结尾,两个参数就是开始到结束。

这个运行时间:159ms,占用内存:15280k。

答案3:

function append(arr, item) {
    var arr1 = arr.concat(item);
    return arr1;
}

思路:js高级教程P94页,concat基于当前数组中的所有项创建一个新数组,并返回这个新数组,原理与答案1类似,不过是concat是js中写好的方法,直接调用就好,但费时与答案1相同。

这个运行时间:186ms,占用内存:15132k

2.

答案1:

function truncate(arr) {
    var arr1 = arr.slice(0);
    arr1.pop();
    return arr1;
}

思路:同理插入,不在一一赘述。

这个运行时间:165ms,占用内存:15156k

答案2:

function truncate(arr) {
    var arr1 = arr.concat();
    arr1.pop();
    return arr1;
}

思路:同理插入,不在一一赘述。

这个运行时间:155ms,占用内存:15700k。

3.

答案1:

function prepend(arr, item) {
    var arr1 = arr.concat();
    arr1.unshift(item);
    return arr1;
}

思路:unshift(item)方法为从前端插入新值,类似队列,先进先出。pop和push类似栈先进后出,弹出和插入都操作最后一个。

这个运行时间:193ms,占用内存:15624k

答案2:

function prepend(arr, item) {
    var arr1 = arr.slice(0);
    arr1.unshift(item);
    return arr1;
}

思路:同理,不在一一赘述。

这个运行时间:200ms,占用内存:17276k。

4.

答案1:

function curtail(arr) {
    var arr1 = arr.slice(0);
    arr1.shift();
    return arr1;
}

思路:shift(),弹出数组第一项。

这个运行时间:193ms,占用内存:15276k

答案2:

function curtail(arr) {
    var arr1 = arr.concat();
    arr1.shift();
    return arr1;
}

思路:同理,不在一一赘述。

这个运行时间:266ms,占用内存:16568k

答案3:

function curtail(arr) {
    var arr1 = arr.slice(1);
    return arr1;
}

思路:才想起来,所有的删除其实都可以用截取数组段来完成,也算是一种另类的删除方法,再前面就不添加了,理解就好。

这个运行时间:167ms,占用内存:15252k(突然发现运行时间好像是每次都不一样的!o(╥﹏╥)o)

5.

答案1:

function concat(arr1, arr2) {
    var arr = arr1.concat(arr2);
    return arr;
}

答案2:

function concat(arr1, arr2) {
    var arr = arr1.slice(0);
    for (var i=0;i<arr2.length;i++){
        arr.push(arr2[i])
    }
    return arr;
}

答案3:

function concat(arr1, arr2) {
    var arr = arr1.concat();
    for (var i=0;i<arr2.length;i++){
        arr.push(arr2[i])
    }
    return arr;
}

答案4:

function concat(arr1, arr2) {
    var arr = new Array();
    for(var i=0;i<arr1.length;i++){
        arr.push(arr1[i]);
    }
    for(i=0;i<arr2.length;i++){
        arr.push(arr2[i]);
    }
    return arr;
}

6.

答案1:

function insert(arr, item, index) {
    var arr1 = arr.slice(0); 
    arr1.splice(index,0,item);
    return arr1;
}

猜你喜欢

转载自blog.csdn.net/qq_37800886/article/details/81172618
今日推荐