請(qǐng)各位讀者添加一下作者的微信公眾號(hào)珊擂,以后有新的文章射富,將在微信公眾號(hào)直接推送給各位矢门,非常感謝盆色。
0. 前言
今天一直在整理關(guān)于面試的內(nèi)容,希望能夠讓我的兄弟姐妹們?cè)谖磥?lái)能夠有所借鑒祟剔。
在整理的時(shí)候隔躲,發(fā)現(xiàn)有一位歪果友人寫(xiě)的文章非常6,所以趁機(jī)翻譯一下物延,分享給大家宣旱。
譯文的原文如下:
1.正文
在今天的文章中會(huì)是一個(gè)非常重要的主題,即:在JavaScript中算法和數(shù)據(jù)結(jié)構(gòu)。這是編程的一個(gè)重要話(huà)題叛薯。我們不應(yīng)該有偏見(jiàn)——Javascript很適合這一目的浑吟。也許有些事情將在解說(shuō)語(yǔ)言有點(diǎn)困難,但是別人會(huì)簡(jiǎn)化,例如基本堆棧實(shí)現(xiàn)(FIFO)。
1.1 Factorial(階乘)
在開(kāi)始一個(gè)典型的例子——階乘和遞歸耗溜。
示例——計(jì)算階乘JavaScript:
function factorial(n) {
if (n == 0)
return 1;
else
return (n * factorial(n-1));
}
alert(factorial(5));
1.2 Leap year(閏年)
下一個(gè)算法是檢查是否某一年是一個(gè)閏年组力。
// is leap year - JavaScript
function checkLeapYear(year) {
if ( ((year % 4 == 0)
&&
(year % 100 != 0)) || (year % 400 == 0) ) {
alert(year + ' is leap');
return true;
} else {
alert(year + ' is NOT leap');
return false;
}
}
alert(checkLeapYear(2012));
alert(checkLeapYear(2013));
1.3 Min-Max algorithm(Min-Max算法)
所以確定最低和最高的給定值。
示例——在JavaScript min-max算法的實(shí)現(xiàn):
var tab = new Array(16, 9, 86, 48, 59, 2, 78, 240, 18);
// default
var min = tab[0];
var max = tab[0];
for (var i = 0; i < tab.length; i++) {
if (min > tab[i]) {
min = tab[i];
}
if (max < tab[i]) {
max = tab[i];
}
}
alert("Min = " + min + ", Max = " + max);
這是一個(gè)簡(jiǎn)單,但有效實(shí)施基于數(shù)組中元素之間的比較抖拴。
1.4 Random string(隨機(jī)字符串)
這個(gè)算法是一個(gè)簡(jiǎn)單的發(fā)生器的隨機(jī)字符串燎字。
var _list = "abcdefghijklmnopqrstuvwxyz9876543210";
function randomStringGenerator(how_long) {
var tmp = '', i = 0;
var list_len = _list.length;
for (i = 0; i < how_long; i++) {
tmp += _list.charAt(Math.floor(Math.random() * list_len));
}
return tmp;
}
alert(randomStringGenerator(8));
實(shí)現(xiàn)基于輸入的字符列表(它可以是任何調(diào)整)。
1.5 Binary search(二分查找)
基于“分而治之”,二叉搜索一個(gè)簡(jiǎn)單但最優(yōu)方法找到價(jià)值甚至在大輸入列表。
在JavaScript的例子——二進(jìn)制搜索:
inputList = new Array();
inputList[0] = 'E';
inputList[1] = 'I';
inputList[2] = 'O';
inputList[3] = 'P';
inputList[4] = 'Q';
inputList[5] = 'R';
inputList[6] = 'T';
inputList[7] = 'U';
inputList[8] = 'W';
inputList[9] = 'Y';
function binarySearch(inputList, key) {
var left = 0;
var right = inputList.length - 1;
while (left <= right) {
var mid = parseInt((left + right) / 2);
if (inputList[mid] == key)
return mid;
else if (inputList[mid] < key)
left = mid + 1;
else
right = mid - 1;
}
return 'Not found';
}
alert(binarySearch(inputList, 'T'));
alert(binarySearch(inputList, 'Z')); // Not found
參見(jiàn):計(jì)算復(fù)雜性轩触。