js——合併兩個有序數組詳細代碼實現

這道題是我在騰訊面試的時候被問到的,當時的回答實在難以令人滿意。這道題本來也不難,然後我就一步步嘗試性地回答推進,首先,可以直接用數組方法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>
            

面試的時候,是通過電話面試的,有些東西當場一下子沒想起來,這個問題之前是整理過的,現在再熟悉一遍。

問題:怎麼克服面試的時候畏難心理,不願動腦筋??

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