牛客前端編程題(日記,代碼待改進)

牛客前端編程題(日記,代碼待改進)

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章