<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          10大算法幫助你提高 JavaScript 技能

          共 5290字,需瀏覽 11分鐘

           ·

          2022-04-20 21:21

          點(diǎn)擊上方?前端Q,關(guān)注公眾號

          回復(fù)加群,加入前端Q技術(shù)交流群


          英文 | https://javascript.plainenglish.io/top-10-algorithms-improve-your-javascript-skills-21507c25ff7


          1、在數(shù)組中查找缺失的數(shù)字

          輸入:[1、2、3、4、6、7、8、9、10]

          輸出: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;};

          2、取反整數(shù)

          輸入:數(shù)字 = 123

          輸出:321

          輸入:數(shù)字 = -123

          輸出:-321

          const reverse = function(num) {    let result = 0;    while (num !== 0) {      result = result * 10 + num % 10;      // Math.trunc() 方法會將數(shù)字的小數(shù)部分去掉,只保留整數(shù)部分      num = Math.trunc(num / 10);    }if (result > 2**31 || result < -(2**31)) return 0;    return result;};

          3、陣列對齊

          輸入:[1,2,3]

          輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] ]

          const permute = function(nums) {    let results = [];let go = (current) => {      if (current.length === nums.length){        results.push(current);        return;      }      nums.forEach(n => {        if (!current.includes(n)){          go([...current, n]);        }      });    }    go([]);    return results;};

          4、字符串對齊

          輸入:s1 = “ab”, s2 = “eidbao”

          輸出:true

          輸入:s1 = “aa”, s2 = “eidbao”

          輸出:false

          const checkPermutation = function(s1, s2) {  const len1 = s1.length, len2 = s2.length;  if (len1 > len2) return false;const count = Array(26).fill(0);  for (let i = 0; i < len1; i++) {      count[s1.charCodeAt(i)-97]++;      count[s2.charCodeAt(i)-97]--;  }  if (!count.some(e => e !== 0)) return true;for (let i = len1; i < len2; i++) {      count[s2.charCodeAt(i)-97]--;      count[s2.charCodeAt(i-len1)-97]++;      if (!count.some(e => e !== 0)) return true;  }  return false;};

          5、最長有效括號

          輸入:”(()”

          輸出:2

          輸入:”)()())”

          輸出:4

          const longestValidParentheses = function(S) {  let stack = [-1], ans = 0;  for (let i = 0; i < S.length; i++)    if (S[i] === '(') stack.push(i)    else if (stack.length === 1) stack[0] = i    else stack.pop(), ans = Math.max(ans, i - stack[stack.length-1])  return ans};

          6、4Sum

          const fourSum = function(nums, target) {  let result = [];  let length = nums.length;  if (length < 4) return result;   nums = nums.sort((a, b) => a - b );for (let i = 0; i < length - 3; i++) {    if (nums[i] === nums[i - 1]) continue;    for (let j = i + 1; j < length - 2; j++) {      if (j > i + 1 && nums[j] === nums[j - 1]) continue;let k = j + 1;      let l = length - 1;while (k < l) {        const sum = nums[i] + nums[j] + nums[k] + nums[l];if (sum === target) {          result.push([nums[i], nums[j], nums[k], nums[l]])        }if (sum <= target) {          k += 1;          while (nums[k] === nums[k - 1]) {            k += 1;          }        }if (sum >= target) {          l -= 1;          while (nums[l] === nums[l + 1]) {            l -= 1;          }        }      }    }  }return result;};

          7、字符串乘法

          輸入:num1 = “2”,num2 = “3”

          輸出:“6”

          const multiply = function(num1, num2) { if (num1 == 0 || num2 == 0) return0’; const result = [];for (let a = num1.length — 1; a >= 0; a — ) { for (let b = num2.length — 1; b >= 0; b — ) { const p1 = a + b; const p2 = a + b + 1; const sum = (result[p2] ?? 0) + num1[a] * num2[b];result[p1] = (result[p1] ?? 0) + Math.floor(sum / 10); result[p2] = sum % 10; } } result[0] == 0 && result.shift(); return result.join(‘’);};

          8、最短回復(fù)

          輸入:s = “aacecaaa”

          輸出:“aaacecaaa”

          輸入:s = “abcd”

          輸出:“dcbabcd”

          const shortestPalindrome = function(s) {  let index = 0;  for (let i = s.length - 1; i >= 0; i--) {    if (s[i] === s[index]) index++;  }  if (index === s.length) return s;  let remainingRev = s.substring(index, s.length);  console.log(remainingRev);  remainingRev = reverse(remainingRev);return remainingRev + shortestPalindrome(s.substring(0, index)) + s.substring(index);};function reverse(string) {  let myString = '';  for (let i = string.length - 1; i >= 0; i--) {    myString = myString + string[i];  }  return myString;};

          9、英文單詞的整數(shù)

          輸入:數(shù)字 = 123

          輸出:“一百二十三”

          輸入:數(shù)字 = 1234567

          輸出:“一百萬二百三十四五百六十七”

          const numberToWords = function(num) {  let result = toHundreds(num % 1000);  const bigNumbers = ["Thousand", "Million", "Billion"];  for (let i = 0; i < 3; ++i) {    num = Math.trunc(num / 1000);    result = num % 1000 !== 0 ? [toHundreds(num % 1000), bigNumbers[i], result].filter(Boolean).join(" ") : result;  }  return result.length === 0 ? "Zero" : result;}function toHundreds(num) {  const numbers = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",    "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"];  const tens = ["", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"];  const result = Array(3).fill("");  let a = Math.trunc(num / 100), b = num % 100, c = num % 10;  result[0] = a > 0 && `${numbers[a]} Hundred`;  result[1] = b < 20 ? numbers[b] : tens[Math.trunc(b / 10)]  result[2] = b >= 20 && `${numbers[c]}`;  return result.filter(Boolean).join(" ");}

          10、Ransom note

          輸入:ransomNote = “aa”,雜志 = “ab”

          輸出:false

          輸入:ransomNote = “aa”,雜志 = “aab”

          輸出:true

          const canConstruct = function(ransomNote, magazine) { if (ransomNote.length > magazine.length) return false; let magMap = new Map();for(let char of magazine) { magMap.set(char, (magMap.get(char) || 0 ) + 1); }for(let note of ransomNote) { let counter = magMap.get(note); if (!counter) return false;magMap.set(note, — counter); } return true;};

          總結(jié)

          以上就是我今天跟你分享的10個算法,希望對您有所幫助。


          往期推薦


          秒啊!答好這5個問題,就入門Docker了
          覺得自己的前端頁面不夠花里胡哨?試試clip-path!
          如何用油猴提升前端開發(fā)效率

          最后


          • 歡迎加我微信,拉你進(jìn)技術(shù)群,長期交流學(xué)習(xí)...

          • 歡迎關(guān)注「前端Q」,認(rèn)真學(xué)前端,做個專業(yè)的技術(shù)人...

          點(diǎn)個在看支持我吧
          瀏覽 30
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人在线免费观看 | 成年人视频免费在线观看大香蕉 | www网站在线观看 | 懂色av懂色av粉嫩av无码 | 亚洲1区2区3区4区5区 |