您好,登錄后才能下訂單哦!
這篇文章主要講解了“JS面試中常見的算法題有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JS面試中常見的算法題有哪些”吧!
1.驗證一個數是否是素數
1、如果這個數是 2 或 3,一定是素數;
2、如果是偶數,一定不是素數;
3、如果這個數不能被3——它的平方根中的任一數整除,m必定是素數。而且除數可以每次遞增(排除偶數)
function isPrime(num){
if (num === 2 || num === 3) {
return true;
};
if (num % 2 === 0) {
return false;
};
let divisor = 3,limit = Math.sqrt(num);
while(limit >= divisor){
if (num % divisor === 0) {
return false;
}
else {
divisor += 2;
}
}
return true;
}
console.log(isPrime(30)); // false
2.斐波那契
最簡單的做法:遞歸。
function fibonacci(n){
if (n <= 0) {
return 0;
}
if (n == 0) {
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
}
但是遞歸會有嚴重的效率問題。比如想要求得f(10),首先需要求f(9)和f(8)。同樣,想求f(9),首先需要f(8)和f(7)…這樣就有很多重復值,計算量也很大。
我自己是一名從事了多年開發的web前端老程序員,目前辭職在做自己的web前端私人定制課程,今年年初我花了一個月整理了一份最適合2019年學習的web前端學習干貨,各種框架都有整理,送給每一位前端小伙伴,想要獲取的可以在后臺私信我:前端,即可免費獲取。
改進:從下往上計算,首先根據f(0)和f(1)計算出f(2),再根據f(1)和f(2)計算出f(3)……以此類推就可以計算出第n項。時間復雜度O(n)。
function fibonacci(n){
let ori = [0,1];
if (n < 2) {
return ori[n];
};
let fiboOne = 1,fiboTwo = 0,fiboSum = 0;
for (let i = 2; i <= n; i++) {
fiboSum = fiboOne + fiboTwo;
fiboTwo = fiboOne;
fiboOne = fiboSum;
}
return fiboSum;
}
console.log(fibonacci(5));
3、求最大公約數
除數 在a和b的范圍內,如果同時a和b處以除數的余等于0,就將此時的除數賦值給res;除數自增,不斷循環上面的計算,更新res。
function greatestCommonDivisor(a, b){
let divisor = 2,res = 1;
if (a < 2 || b < 2) {
return 1;
};
while(a >= divisor && b >= divisor){
if (a%divisor === 0 && b%divisor === 0) {
res = divisor;
}
divisor++;
}
return res;
};
console.log(greatestCommonDivisor(8, 4)); // 4
console.log(greatestCommonDivisor(69, 169)); // 1
解法2:
function greatestCommonDivisor(a,b){
if (b === 0) {
return a;
} else {
return greatestCommonDivisor(b,a%b);
}
};
4、數組去重
對原數組進行遍歷
獲取arr[i]的值 j;
對應到輔助數組 exits 的位置 j 的值,如果沒有,則證明arr[i] 的值沒有重復,
此時將 值j 存入res數組,并將輔助數組 j 位置的值置為 true。
最后返回res數組。
感謝各位的閱讀,以上就是“JS面試中常見的算法題有哪些”的內容了,經過本文的學習后,相信大家對JS面試中常見的算法題有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。