js算法題/前端面經總結(一)

1.實現鏈表的反轉

(function (){
          var node3 = {
              name:'obj3',
              next:null
          }
          var node2 = {
              name:'obj2',
              next:obj3
          }
          var node1 = {
              name:'obj1',
              next:obj2
          }
          function print(node){
              var p   = node;
              while(p){
                  console.log(p.name)
                  p = p.next;
              }
          }
          function reverse(nodeList){
              var pnode=NodeList,
				  pre=null,//用來儲存上一個節點,初始爲null
				  next//用來存放下一個節點
			  while(pnode){
				next=pnode.next//獲得下一個節點
			    pnode.next=pre//當前節點next指向上一個節點
				pre=pnode//設置上一個節點爲當前節點
				pnode=next//設置當前節點爲下一個節點
			  }
			return pre
          }
          print(reverse(node1));
})();

2.(百詞斬前端筆試題)給定一組數,其中三個以上的相鄰的數用-連接,其餘的用空格分隔,例如:

輸入:1,2,3,4,6,7,9,10,11
輸出:1-4 6 7 9-11
    var s='1 2 3 4 6 7 9 10 11'
	var find=function(s) {
		var arr=s.split(' ')
		var str=''//存放結果
        var l=arr.length
		var c_arr=[]
		for(i=0;i<l;i++){
			c_arr.push(arr[i])
			if(+arr[i]+1!==+arr[i+1]){//這裏注意用加號轉爲數字
				if(c_arr.length>=3){
					str=str+c_arr[0]+'-'+c_arr[c_arr.length-1]+' '
				}else{
					str=str+c_arr.join(' ')+' '
				}
				c_arr=[]
			}
		}
		return str.substr(0,str.length-1)//去掉最後一個空格
	}
	console.log(find(s))

3.JS實現快速排序算法

var quickSort=function(arr){
    function swap(arr,i,j){
        [arr[i],arr[j]]=[arr[j],arr[i]]//利用es6新語法
    }
    function partition(arr,l,r){
        var i=l,j=r-1,pivot=arr[r-1]//以最後一個元素爲基準
        while(i!==j){
            arr[i]<=pivot?i++:swap(arr,i,--j)//從左邊開始,若小於基準則繼續往右,若大於基準則交換i,j,j往左走,繼續判斷位置
        }
        swap(arr,j,r-1)//最後將基準放到ij相等的位置
        return j//返回基準此時的位置
    }
    function qsort(arr,l=0,r=arr.length){
        if(r-l<=1)return
        const m=partition(arr,l,r)//獲得基準位置
        qsort(arr,l,m)//遞歸排序
        qsort(arr,m+1,r)
    }
    qsort(arr)
}
var arr=[1,4,-1,6,2,-8]
quickSort(arr)
console.log(arr)

 

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