這道題是我在騰訊面試的時候被問到的,當時的回答實在難以令人滿意。這道題本來也不難,然後我就一步步嘗試性地回答推進,首先,可以直接用數組方法concat(),當合並後數組並不關心大小排序時。接下來是,考慮合併後數組有序,這也是不難實現的,下面貼代碼。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>合併兩個有序數組</title>
<!-- 經常用到的數組操作方法說明:slice和splice方法參數必須是數字,不能是字母或代數式 。
slice方法並不修改原數組,如果想刪除數組中的一段元素,應該使用splice方法 -->
</head>
<body>
<script type="text/javascript">
//方法一:一種雞肋方法,合併兩個數組,然後調用sort方法
/*function merge(nums1, nums2) {
for(var i=0;i<nums2.length;i++){
nums1.push(nums2[i])
}
nums1.sort(function(a,b){//排序參數設置,實現從小到大排序
return a-b;
});
return nums1;
};*/
//方法二:
function mergeArray(arr1,arr2){
var ind1=0; //標記arr1的對比元素的初始索引值
var ind2=0; //標記arr2的對比元素的初始索引值
var arr=[]; //作爲輸出的新數組
while(ind1<arr1.length && ind2<arr2.length){
//當arr1和arr2元素均未全部存入arr中,則從數組第一個元素開始進行比較,將較小的元素存入arr中
if(arr1[ind1]<=arr2[ind2]){
arr.push(arr1.slice(ind1)[0]); //若arr1元素小於arr2元素,則將arr1的元素存入arr中
ind1++;//已將元素push到輸出數組中,將數組arr1的index指向移動到下一個
}else{
arr.push(arr2.slice(ind2)[0]);
ind2++;
}
}
//當不滿足上述while條件(ind1<arr1.length && ind2<arr2.length)時,就直接將剩餘數組元素拼接在輸出數組arr後面
return arr.concat((ind1<arr1.length)?arr1.slice(ind1):arr2.slice(ind2));//這個地方也可以分開寫
}
var nums1=[1,2,3];
var nums2=[2,5,6];
//var arr=merge(nums1,nums2);
//console.log(arr);
console.log(mergeArray(nums1,nums2));//[1, 2, 2, 3, 5, 6]
</script>
</body>
</html>
面試的時候,是通過電話面試的,有些東西當場一下子沒想起來,這個問題之前是整理過的,現在再熟悉一遍。
問題:怎麼克服面試的時候畏難心理,不願動腦筋??