我們去面試一般都有筆試,筆試題一般都會涉及到很多算法的東西。
不管你用的多不多,反正就是要會。不然筆試很難過。
就算是直接面試的,有時候也會遇到面試官直接叫你當場寫個算法題出來這種情況。
因為筆試時間很有限,不會出很復雜的題目,所以筆試怎么出都不會離開下面這幾種題。
廢話不多說,下面來列出主要的幾個算法題。
1.排序
一般都是給個數組然后排序,有的從小到大,有的從大到小。一定要看清楚。以下都是從小到大的排序算法。
冒泡法
var arr = [3,6,1,2,5]; var temp; for(var i= 0;i<arr.length;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i] > arr[j]){ temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } console.log(arr);快速排序法
function quicksort (arr){ if(arr.length<=1){ return arr; } var left = []; var right = []; var middle = arr[0]; for(var i=1;i<arr.length;i++){ if(arr[i]<middle){ left.push(arr[i]); }else{ right.push(arr[i]); } } return quicksort(left).concat([middle],quicksort(right));}注意:可以用快速就不要用冒泡。實在沒記住才用冒泡。(因為快速排序設計到遞歸,面試官更多是想考察你遞歸算法)
2.數組去重
這題考察的是你會不會存儲數組元素的出現次數來解決去重問題。當然解法也有很多,下面是其中一種解法。
Array.prototype.unique = function(){ var res = []; var json = {}; for(var i = 0; i < this.length; i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]] = 1; } } return res;}var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];alert(arr.unique());3.js的拷貝
這題涉及到的就是你能不能清楚的分辨深拷貝和淺拷貝。
var a = {name:'Tom'}; var b = a; b.name = 'Peter';
請問a.name = ?
正確答案是Peter,如果你的答案是Tom的話,那么你要好好去看看js的深拷貝。
如果要被拷貝的是數組:
slice和concat都可以直接讓數組進行深拷貝
arr.slice();arr.concat();
下面是解法。當然肯定有比我寫得更好的。
function deepCopy(source){ var result = {}; for(var i in source){ if(typeof source[i] === "object"){ result[i] = deepCopy(source[i]); }else{ result[i] = source[i]; } } return result;}4.獲取字符串里出現子串的位置
function appear(str,str_target){ var n = 0; var result = []; while(str.indexOf(str_target,n)!=-1 && n < str.length){ result.push(str.indexOf(str_target,n)); n = str.indexOf(str_target,n) + str_target.length; } return result;}var arr = appear('abascbascbabasbascbascascbab','ab');console.log(arr);
新聞熱點
疑難解答
圖片精選