牛客前端編程題(日記,代碼待改進)
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;
}