常見前端面試題算法彙總-之後慢慢更新

前端對於算法的考察可能相對較少,但是每一個大廠都會有對算法的考察與檢測。下面是有一些自己總結的一些大廠考察的算法。

冒泡排序

//冒泡算法,讓一個數組從小到大進行排列
function mao(arr){
    var len = arr.length
    for(var i = 0 ;i<len;i++){
        for(var j = i+1 ;j<len;j++){
            if(arr[i]>arr[j]){
                var temp = arr[i]
                arr[i] = arr[j]
                arr[j] = temp
            }
        }
        continue;
    }
    console.log(arr);
}

mao([5,6,4,2,3,2]);

數組去重

function sort(arr){
    let obj={};
    let newArr=[];
    for(let i=0;i<arr.length;i++){
        if(!obj[arr[i]]){
            obj[arr[i]]=1;
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

字符串反轉

function reverseString(str){
    return str.split('').reverse().join('');
}

console.log(reverseString("hello"))

產生隨機數

console.log(random(5))
//從字符串裏面選擇n個字母
function random(n){
    let str='123asdasdasrwer';
    let obj='';
    var l=str.length;
    for(let i=0;i<n;i++){
        obj+=str.charAt(Math.floor(Math.random()*l));
    }
    return obj
}

二分查找

	     //前提爲有序數組
		 //方法一:非遞歸
		function binarySearch(arr,target){
			var high = arr.length-1,
			low = 0,
			mid;
			while(low<=high){
				mid = Math.floor((low+high)/2);
				if(arr[mid]<target){
					low+=1;
				}else if (arr[mid]>target){
					high-=1;
				}else{
					return mid;
				}
			}
			return -1;
		}
		//遞歸
		function binarySearch(arr,target,low=0,high=arr.length-1){
			var mid = Math.floor((low+high)/2);
			if(low<=high){
				if(arr[mid]<target){
					return binarySearch(arr,target,mid+1,high);
				}else if(arr[mid]>target){
					return binarySearch(arr,target,low,high-1);
				}else {
					return mid;
				}
			}else{
				return -1;
			}
		}
		console.log(binarySearch([0,1,3,5,7,9],3));

獲取地址欄的參數值

//獲取url裏面的的某個參數的值

function getUrlByName(url){
    let urls= url.split('?')
    if(urls[0]==url){
        return " "
    }
    let obj = {};
    let arr = urls[1].split('&')
    for(let i=0;i<arr.length;i++){
        let arg = arr[i].split("=");
        obj[arg[0]] =arg[1] 
    }
    return obj;

}
var href = getUrlByName("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=2&ch=&tn=baiduhome_pg&bar=&wd=%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BEjs%E5%AE%9E%E7%8E%B0&oq=%25E4%25BA%258C%25E5%2588%2586%25E6%259F%25A5%25E6%2589%25BE&rsv_pq=91ad2676001a9563&rsv_t=dea8C%2F0NYMNPabm3q3HWnJBqwfp8k4iuQvmy3wsxSBA8y%2FVz4nxv4orId%2B5rLjMUThgZ&rqlang=cn&rsv_enter=1&rsv_dl=tb&inputT=1896")
console.log(href['ie'])//utf-8

統計字符串中出現最多的那個字母

function findMaxCharacter(str){
    if(str.length==1){
        return str;
    }
    let charobj ={}
    
    for(let i=0; i<str.length;i++){
        if(!charobj[str.charAt(i)]){
            charobj[str.charAt(i)]=1;
        }else{
            charobj[str.charAt(i)]+=1
        }
    }
    //找出數組中最大的一個數的
    let maxChar =""
    let maxValue =1;
    for(var k in charobj){
        if(charobj[k]>=maxValue){
            maxChar = k;
            maxValue = charobj[k];
        }
    }
    return  maxChar;

}

console.log(findMaxCharacter("shdiadjsaiijdia"));

二叉樹的插入
手寫快排(複雜度)
分治算法
一行代碼實現判斷迴文字符串
堆排序

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