當前位置:成語大全網 - 書法字典 - Js基礎算法有哪些?

Js基礎算法有哪些?

這次給大家介紹的Js基礎算法有哪些,使用Js基礎算法有哪些註意事項?下面是實戰案例,大家來看看。

素數

問:妳將如何驗證壹個質數?

答:質數只能被自身和1整除。所以,我會運行壹個while循環,加上1。請看代碼示例。如果妳聽不懂,那就不是妳的菜。先回去學javaScript基礎再回來。)

方法1

函數isPrime(n){

var pis or = 2;

while(n & gt;pisor){

if(n % pisor == 0){

返回false

}

其他

pisor++;

}

返回true

}

isPrime(137);// =真

isPrime(237);// = falseQ:妳能做得更好嗎?

答:是的。除數壹次增加1。我可以在3後加2。如果壹個數能被任何壹個偶數整除,它就能被2整除。

補充:如果不需要把除數增加到這個數。妳可以早點停下來。讓我按照下面的步驟解釋壹下(必要的話讀幾遍)

首先,沒有壹個數能被大於它壹半的數整除。比如13永遠不會被7,8,9整除。甚至可以是偶數的壹半。比如16會被8整除,但絕不會被9,10,11,12整除。

結論:壹個數永遠不會被比它的值大壹半的數整除。所以,我們可以少回收50%。

第二步,如果壹個數不能被3整除。如果它能被3整除,那麽它就不是素數。那麽,它不能被任何大於它的值1/3的數整除。例如,35不能被3整除。所以永遠不會被大於35/3的數整除,或者被12,13,14整除?如果妳取壹個像36這樣的偶數,它永遠不會被13,14,15整除。

結論:壹個數可以被它的值的三分之壹整除。

第三步,比如妳有壹個號碼127。127不能被2整除,最多查63.5。其次,127不能被3整除。因此,您將檢查到127/3大約42。它不能被5整除。除數應該小於127/5,大概是25,而不是7。那麽,我們應該停在哪裏呢?

結論:除數會小於math.sqrt(N)。

方法2

如果妳不能理解,不要擔心,別管它。不是研究人員也沒關系。

函數isPrime(n)

{

var pisor = 3,

limit = math . sqrt(n);

//檢查簡單案例

如果(n == 2 || n == 3)

返回true

如果(n % 2 == 0)

返回false

while(皮索爾& lt=限制)

{

if (n % pisor == 0)

返回false

其他

pisor+= 2;

}

返回true

}

isPrime(137);// =真

isPrime(237);// =假質因數

問:如何求壹個數的所有質因數?

答:執行while循環。開始除以2。如果不能除盡,記錄除數,直到除盡。

函數質因數(n){

var因子=,);// = [1,2,2,3,5,6,9,29]兩個數的值不通過臨時變量交換。

問:如何在不使用臨時變量的情況下交換兩個數?

函數swapNumb(a,b){

console.log('交換前: ',' a:',a,' b:',b);

b = b-a;

a = a+b;

b = a-b;

console.log('交換後: ',' a:',a,' b:',b);

}

swapNumb(2,3);

// =交換前:a: 2 b: 3

// =交換後:a: 3 b: 2位運算:不好意思,這個沒法跟妳解釋。Kinjal Dave建議去邏輯合取來理解它。會浪費妳30分鐘。

函數swapNumb(a,b){

console.log("a: " + a +"和b:"+b ");

a = a ^ b;

b = a ^ b;

a = a ^ b;

console.log("a: " + a +"和b:"+b ");

}

swapNumb(2,3);

// = a: 2和b: 3

// = a: 3和b: 2字符串反轉

問:如何在JavaScript中反轉壹個字符串?

答:可以遍歷字符串,將字母連接到新字符串。

方法1

功能反轉(字符串){

var RTN str =“”;

for(var I = str . length-1;我& gt=0;我- ){

RTN str+= str[I];

}

返回rtnStr

}

反向(“妳是個不錯的紈絝子弟”);

//= "educatecin a era uoy "問:妳知道串聯在現代瀏覽器中工作得很好,但在IE8這樣的舊瀏覽器中會變慢。反轉壹個字符串有哪些不同的方法?

甲:當然可以。我可以使用數組或添加壹些檢查。如果字符串為NULL或另壹個字符串,這將失敗。讓我也做壹些測試。使用此數組類似於在某些服務器端語言中使用stringbuffer。

方法2

功能反轉(字符串){

var RTN str =[];

如果(!str | |的類型!= ' string ' | | str.length & lt2)返回字符串;

for(var I = str . length-1;我& gt=0;我- ){

RTN str . push(str[I]);

}

返回RTN str . join(“”);

}問:什麽是運行時復雜度?

答:O(n);

問:妳能做得更好嗎?

答:我可以遍歷壹半的索引,會節省壹點。沒用,也不壹定能打動面試官。

方法3

功能反轉(字符串){

str = str . split(');

var len = str.length,

half index = math . floor(len/2)-1,

revStr

for(var I = 0;我& lt= halfIndexi++) {

revStr = str[len-I-1];

str[len-I-1]= str[I];

str[I]= revStr;

}

返回str . join(“”);

問:這行得通,但妳能遞歸地做嗎?

答:是的。

方法4

功能反轉(字符串){

if (str === "") {

返回“”;

}否則{

return reverse(str . substr(1))+str . charat(0);

}

}方法5

問:妳能在方法中使用壹些構造來使它更簡潔嗎?

功能反轉(字符串){

如果(!str | | str.length & lt2)返回字符串;

返回str.split(' ')。反轉()。聯接(“”);

}方法6

問:妳能做反函數作為字符串擴展嗎?

答:我需要將這個函數添加到String.prototype中,而不是使用str作為參數,我需要使用這個。

string . prototype . reverse = function(){

如果(!this | | this.length & lt2)退回這個;

返回this.split(' ')。反轉()。聯接(“”);

}

abc。反向();

// = 'cba '字反轉

問:妳如何顛倒句子中的單詞?

答:妳必須檢查整個字符串的空白區域。確定是否有多個空格。

//有壹個尾隨空格

//稍後修復此問題

//現在我困了

函數反轉字(字符串){

var rev = [],

word len = 0;

for(var I = str . length-1;我& gt=0;我- ){

if(str[i]==' ' || i==0){

rev.push(str.substr(i,word len+1));

word len = 0;

}

其他

word len++;

}

返回rev . join(“”);

}快速解決內置方法:

函數反轉字(字符串){

返回str.split(“”)。反向();

}原位反演

問:如果妳有壹個類似“我是好孩子”的字符串,妳如何將其更改為“I ma eht doog yob”?註意,這幾個字位置相同,但是顛倒了。

答:要做到這壹點,我得做串倒排和詞倒排。

函數反轉位置(str){

返回str.split(“”)。反轉()。聯接(“”)。拆分(“”)。反轉()。聯接(“”);

}

reverseInPlace('我是好孩子');// = "I ma eht doog yob "問:好的.好的,不使用內置反函數可以嗎?

甲:(內心獨白)開什麽玩笑!!

//求和兩個方法。

//您可以簡單地用“”來拆分單詞

//並對每壹個單詞,調用反向函數

//將reverse放在單獨的函數中

//如果妳做不到,

//喝杯水,睡第壹個不重復的字符。

問:如何找到字符串中第壹個不重復的字符?

甲:有什麽條件嗎?

例如,它區分大小寫嗎?

面試官可能會說沒有。

它是壹根長弦還是壹根短弦?

問:這些和它有關系嗎?

答:例如,如果它是壹個很長的字符串,比如壹百萬個字符,我想檢查是否有26個英文字符被重復。我可能會檢查所有字符是否每200個字母重復壹次(例如),而不是遍歷整個字符串。這將節省計算時間。

問:簡單來說,這串就是“快速的棕色狐貍跳躍然後快速吹氣”。

函數first nonrepatchar(str){

var len = str.length,

char,

char count = { };

for(var I = 0;我& ltleni++){

char = str[I];

if(charCount[char]){

char count[char]++;

}

其他

char count[char]= 1;

}

for (var j in charCount){

if (charCount[j]==1)

返回j;

}

}

firstNonRepeatChar(“快速的棕色狐貍跳躍然後快速吹氣”);// = "f "有問題,回收時不能及時退出。

刪除重復字符

問:如何刪除字符串中重復的字符?

答:這和第壹個不重復字符很像。妳應該問壹些類似的問題。區分大小寫嗎?。

如果面試官說這是區分大小寫的,那麽妳就放松了。如果他說沒有,妳可以用string.toLowercase()把字符串。面試官可能不喜歡這種方法。因為返回的字符串大小寫不同。因此

函數removeDuplicateChar(str){

var len = str.length,

char,

charCount = {},

newStr =[];

for(var I = 0;我& ltleni++){

char = str[I];

if(charCount[char]){

char count[char]++;

}

其他

char count[char]= 1;

}

for (var j in charCount){

if (charCount[j]==1)

newstr . push(j);

}

返回newstr . join(“”);

}

removeDuplicateChar('了解更多JavaScript dude ');// = "Lnmojvsciptu "回文檢查

問:如何檢查壹個字符串是否是回文?

答:反轉字符串。如果倒置前後相等,則為回文。

函數isPalindrome(str){

var i,len = str.length

for(I = 0;我& ltlen/2;i++){

if (str[i]!== str[len -1 -i])

返回false

}

返回true

}

isPalindrome(“夫人”)

// =真

isPalindrome('豐田')

// =假或

函數checkPalindrom(str) {

return str == str.split(' ')。反轉()。聯接(“”);

}同樣,在O(n)時間復雜度內判斷壹個字符串是否包含在回文字符串中。能在O(1)時間內解決問題嗎?

尋找缺失的數字

問:如果在1到100的壹個無序數組中找到缺失的數字,妳會怎麽做?

描述:數組中的數字是1到100。數組中只有壹個數字丟失。