irpas技术客

10 个算法提升你的 JavaScript 技能_BYGFJ

网络 982

1)在数组中查找缺失的数字 Input: [1, 2, 3, 4, 6, 7, 8, 9, 10] Output: 5 const find_missing = function(input) { let n = input.length + 1; let sum = 0; for (let i in input) { sum += input[i]; } return Math.floor((n * (n + 1)) / 2) - sum; };

提示:算术级数和公式:

%20 2)反转整数%20 Input:%20num%20=%20123 Output:%20321 Input:%20num%20=%20-123 Output:%20-321%20 const%20reverse%20=%20function(num)%20{ %20%20%20%20let%20result%20=%200; %20%20%20%20while%20(num%20!==%200)%20{ %20%20%20%20%20%20result%20=%20result%20*%2010%20+%20num%20%%2010; %20%20%20%20%20%20//%20Math.trunc()%20方法会将数字的小数部分去掉,只保留整数部分 %20%20%20%20%20%20num%20=%20Math.trunc(num%20/%2010); %20%20%20%20} %20%20%20%20if%20(result%20>%202**31%20||%20result%20<%20-(2**31))%20return%200; %20%20%20%20return%20result; };%20 3)%20数组排列%20 Input:%20[1,2,3] Output:%20[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] %20 const%20permute%20=%20function(nums)%20{ %20%20%20%20let%20results%20=%20[]; %20%20%20%20let%20go%20=%20(current)%20=>%20{ %20%20%20%20%20%20if%20(current.length%20===%20nums.length){ %20%20%20%20%20%20%20%20results.push(current); %20%20%20%20%20%20%20%20return; %20%20%20%20%20%20} %20%20%20%20%20%20nums.forEach(n%20=>%20{ %20%20%20%20%20%20%20%20if%20(!current.includes(n)){ %20%20%20%20%20%20%20%20%20%20go([...current,%20n]); %20%20%20%20%20%20%20%20} %20%20%20%20%20%20}); %20%20%20%20} %20%20%20%20go([]); %20%20%20%20return%20results; };%20 4)%20字符串中的排列%20 Input:%20s1%20=%20"ab",%20s2%20=%20"eidbao" Output:%20true Input:%20s1%20=%20"aa",%20s2%20=%20"eidbao" Output:%20false%20 const%20checkPermutation%20=%20function(s1,%20s2)%20{ %20%20const%20len1%20=%20s1.length,%20len2%20=%20s2.length; %20%20if%20(len1%20>%20len2)%20return%20false; %20%20const%20count%20=%20Array(26).fill(0); %20%20for%20(let%20i%20=%200;%20i%20<%20len1;%20i++)%20{ %20%20%20%20%20%20count[s1.charCodeAt(i)-97]++; %20%20%20%20%20%20count[s2.charCodeAt(i)-97]--; %20%20} %20%20if%20(!count.some(e%20=>%20e%20!==%200))%20return%20true; %20%20for%20(let%20i%20=%20len1;%20i%20<%20len2;%20i++)%20{ %20%20%20%20%20%20count[s2.charCodeAt(i)-97]--; %20%20%20%20%20%20count[s2.charCodeAt(i-len1)-97]++; %20%20%20%20%20%20if%20(!count.some(e%20=>%20e%20!==%200))%20return%20true; %20%20} %20%20return%20false; };%20 5)%20最长有效括号%20 Input:%20"(()" Output:%202 Input:%20")()())" Output:%204%20 const%20longestValidParentheses%20=%20function(S)%20{ %20%20let%20stack%20=%20[-1],%20ans%20=%200; %20%20for%20(let%20i%20=%200;%20i%20<%20S.length;%20i++) %20%20%20%20if%20(S[i]%20===%20'(')%20stack.push(i) %20%20%20%20else%20if%20(stack.length%20===%201)%20stack[0]%20=%20i %20%20%20%20else%20stack.pop(),%20ans%20=%20Math.max(ans,%20i%20-%20stack[stack.length-1]) %20%20return%20ans };%20 6)%204Sum%20 const%20fourSum%20=%20function(nums,%20target)%20{ %20%20let%20result%20=%20[]; %20%20let%20length%20=%20nums.length; %20%20if%20(length%20<%204)%20return%20result;%20 %20%20nums%20=%20nums.sort((a,%20b)%20=>%20a%20-%20b%20); %20%20for%20(let%20i%20=%200;%20i%20<%20length%20-%203;%20i++)%20{ %20%20%20%20if%20(nums[i]%20===%20nums[i%20-%201])%20continue; %20%20%20%20for%20(let%20j%20=%20i%20+%201;%20j%20<%20length%20-%202;%20j++)%20{ %20%20%20%20%20%20if%20(j%20>%20i%20+%201%20&&%20nums[j]%20===%20nums[j%20-%201])%20continue; %20%20%20%20%20%20let%20k%20=%20j%20+%201; %20%20%20%20%20%20let%20l%20=%20length%20-%201; %20%20%20%20%20%20while%20(k%20<%20l)%20{ %20%20%20%20%20%20%20%20const%20sum%20=%20nums[i]%20+%20nums[j]%20+%20nums[k]%20+%20nums[l]; %20%20%20%20%20%20%20%20if%20(sum%20===%20target)%20{ %20%20%20%20%20%20%20%20%20%20result.push([nums[i],%20nums[j],%20nums[k],%20nums[l]]) %20%20%20%20%20%20%20%20} %20%20%20%20%20%20%20%20if%20(sum%20<=%20target)%20{ %20%20%20%20%20%20%20%20%20%20k%20+=%201; %20%20%20%20%20%20%20%20%20%20while%20(nums[k]%20===%20nums[k%20-%201])%20{ %20%20%20%20%20%20%20%20%20%20%20%20k%20+=%201; %20%20%20%20%20%20%20%20%20%20} %20%20%20%20%20%20%20%20} %20%20%20%20%20%20%20%20if%20(sum%20>=%20target)%20{ %20%20%20%20%20%20%20%20%20%20l%20-=%201; %20%20%20%20%20%20%20%20%20%20while%20(nums[l]%20===%20nums[l%20+%201])%20{ %20%20%20%20%20%20%20%20%20%20%20%20l%20-=%201; %20%20%20%20%20%20%20%20%20%20} %20%20%20%20%20%20%20%20} %20%20%20%20%20%20} %20%20%20%20} %20%20} %20%20return%20result; };%20 7)字符串相乘%20 Input:%20num1%20=%20"2",%20num2%20=%20"3" Output:%20"6" %20 const%20multiply%20=%20function(num1,%20num2)%20{ %20%20%20%20if%20(num1%20==%200%20||%20num2%20==%200)%20return%20'0'; %20%20%20%20const%20result%20=%20[]; %20%20%20%20for%20(let%20a%20=%20num1.length%20-%201;%20a%20>=%200;%20a--)%20{ %20%20%20%20%20%20%20%20for%20(let%20b%20=%20num2.length%20-%201;%20b%20>=%200;%20b--)%20{ %20%20%20%20%20%20%20%20%20%20%20%20const%20p1%20=%20a%20+%20b; %20%20%20%20%20%20%20%20%20%20%20%20const%20p2%20=%20a%20+%20b%20+%201; %20%20%20%20%20%20%20%20%20%20%20%20const%20sum%20=%20(result[p2]%20??%200)%20+%20num1[a]%20*%20num2[b]; %20%20%20%20%20%20%20%20%20%20%20%20result[p1]%20=%20(result[p1]%20??%200)%20+%20Math.floor(sum%20/%2010); %20%20%20%20%20%20%20%20%20%20%20%20result[p2]%20=%20sum%20%%2010; %20%20%20%20%20%20%20%20} %20%20%20%20} %20%20%20%20result[0]%20==%200%20&&%20result.shift(); %20%20%20%20return%20result.join(''); };%20 8)%20最短回文%20 Input:%20s%20=%20"aacecaaa" Output:%20"aaacecaaa" Input:%20s%20=%20"abcd" Output:%20"dcbabcd" %20 const%20shortestPalindrome%20=%20function(s)%20{ %20%20let%20index%20=%200; %20%20for%20(let%20i%20=%20s.length%20-%201;%20i%20>=%200;%20i--)%20{ %20%20%20%20if%20(s[i]%20===%20s[index])%20index++; %20%20} %20%20if%20(index%20===%20s.length)%20return%20s; %20%20let%20remainingRev%20=%20s.substring(index,%20s.length); %20%20console.log(remainingRev); %20%20remainingRev%20=%20reverse(remainingRev); %20%20return%20remainingRev%20+%20shortestPalindrome(s.substring(0,%20index))%20+%20s.substring(index); }; function%20reverse(string)%20{ %20%20let%20myString%20=%20''; %20%20for%20(let%20i%20=%20string.length%20-%201;%20i%20>=%200;%20i--)%20{ %20%20%20%20myString%20=%20myString%20+%20string[i]; %20%20} %20%20return%20myString; };%20 9)整数到英文单词%20 Input:%20num%20=%20123 Output:%20"One%20Hundred%20Twenty%20Three" Input:%20num%20=%201234567 Output:%20"One%20Million%20Two%20Hundred%20Thirty%20Four%20Thousand%20Five%20Hundred%20Sixty%20Seven"%20 const%20numberToWords%20=%20function(num)%20{ %20%20let%20result%20=%20toHundreds(num%20%%201000); %20%20const%20bigNumbers%20=%20["Thousand",%20"Million",%20"Billion"]; %20%20for%20(let%20i%20=%200;%20i%20<%203;%20++i)%20{ %20%20%20%20num%20=%20Math.trunc(num%20/%201000); %20%20%20%20result%20=%20num%20%%201000%20!==%200%20?%20[toHundreds(num%20%%201000),%20bigNumbers[i],%20result].filter(Boolean).join("%20")%20:%20result; %20%20} %20%20return%20result.length%20===%200%20?%20"Zero"%20:%20result; } function%20toHundreds(num)%20{ %20%20const%20numbers%20=%20["",%20"One",%20"Two",%20"Three",%20"Four",%20"Five",%20"Six",%20"Seven",%20"Eight",%20"Nine",%20"Ten", %20%20%20%20"Eleven",%20"Twelve",%20"Thirteen",%20"Fourteen",%20"Fifteen",%20"Sixteen",%20"Seventeen",%20"Eighteen",%20"Nineteen"]; %20%20const%20tens%20=%20["",%20"",%20"Twenty",%20"Thirty",%20"Forty",%20"Fifty",%20"Sixty",%20"Seventy",%20"Eighty",%20"Ninety"]; %20%20const%20result%20=%20Array(3).fill(""); %20%20let%20a%20=%20Math.trunc(num%20/%20100),%20b%20=%20num%20%%20100,%20c%20=%20num%20%%2010; %20%20result[0]%20=%20a%20>%200%20&&%20`${numbers[a]}%20Hundred`; %20%20result[1]%20=%20b%20<%2020%20?%20numbers[b]%20:%20tens[Math.trunc(b%20/%2010)] %20%20result[2]%20=%20b%20>=%2020%20&&%20`${numbers[c]}`; %20%20return%20result.filter(Boolean).join("%20"); }%20 10)%20赎金票据%20 Input:%20ransomNote%20=%20"aa",%20magazine%20=%20"ab" Output:%20false Input:%20ransomNote%20=%20"aa",%20magazine%20=%20"aab" Output:%20true%20 const%20canConstruct%20=%20function(ransomNote,%20magazine)%20{ %20%20if%20(ransomNote.length%20>%20magazine.length)%20return%20false; %20%20let%20magMap%20=%20new%20Map(); %20%20for(let%20char%20of%20magazine)%20{ %20%20%20%20magMap.set(char,%20(magMap.get(char)%20||%200%20)%20+%201); %20%20} %20%20%20for(let%20note%20of%20ransomNote)%20{ %20%20%20%20let%20counter%20=%20magMap.get(note); %20%20%20%20if%20(!counter)%20return%20false; %20%20%20%20magMap.set(note,%20--counter); %20%20%20} %20%20return%20true; };%20

经过一番研究,我得出了这%2010%20个算法,每个算法都有特殊的技巧,不仅可以提高我们的%20JavaScript%20技能,还可以帮助我们提高批判性思维能力🙂。

%20

最后还赠送一份前端学习大礼包送给大家【加君羊:581286372】帮助大家更好的学习!

%20


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #10 #个算法提升你的 #JavaScript #技能 #1 #2