牛客前端编程题(日记,代码待改进)
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;
}