素數
問:妳將如何驗證壹個質數?
答:質數只能被自身和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。數組中只有壹個數字丟失。