算法题前端解决方案——JavaScript代码实现

Posted 清颖~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法题前端解决方案——JavaScript代码实现相关的知识,希望对你有一定的参考价值。

文章目录

1. 比较版本号

思想:字符串转为数组,一一对比。

function Compare(verson1, verson2) 
      let v1Arr = verson1.split(".");
      let v2Arr = verson2.split(".");
      let i = 0,
        j = 0;
      while (i < v1Arr.length || j < v2Arr.length) 
        let str1 = v1Arr[i] || 0;
        let str2 = v2Arr[j] || 0;
        if (str1 - str2 > 0) 
          return 1;
         else if (str1 - str2 < 0) 
          return -1;
        
        i++;
        j++;
      
      return 0;
   

运行通过!牛客网链接

2. 找字符串中重复次数最多的字符

  function findMaxStr(str) 
      let res = ;
      for (let i = 0; i < str.length; i++) 
        if (!res[str.charAt(i)]) 
          res[str.charAt(i)] = 1;
         else 
          res[str.charAt(i)] = res[str.charAt(i)]+1; // 如果有,增加一次
        
      
      let iMax = 0,
        target = "";
      for (let key in res) 
        if (res[key] > iMax) 
          iMax = res[key]; // iMax要被重写
          target = key;
        
      
      console.log('res:',res);
      console.log( "出现次数最多的是:" + target + ", 出现" + iMax + "次");
    
    findMaxStr('sabcdEs')

3. 是否是回文数

function isPalindrome(s) 
 s = s + '' ;  // 如果输入的是数字,要转化为字符串。或 s.toString()
 let newS = s.length && s.split('').reverse().join('') // 翻转字符串
 return s === newS

4. 最长回文子串

5. JS数组转树

https://www.jb51.net/article/253093.htm

6. 括号匹配

/**
 * @param string s
 * @return boolean
 */
// var isValid = function(s) 
//     // if(type s !=='String' )
//     //     return false;
//     // 
//     let flag = true;
//     const getAfterS= (beforeS)=>
//         let afterS;
//         switch(beforeS)
//             case '(': afterS=')'; break;
//             case '[': afterS=']'; break;
//             case '': afterS=''; break;
//         
//         return afterS;
//     
//     const arr = s.split('');

//     for(let i=0; i<arr.length; i++)
//         if(arr[i] && arr[i+1] !== getAfterS(arr[i]))
//             return false;
//         
//         i++;
//     
//     return flag;
// ;
// isValid('()[]')

// var isValid = function (s) 
//   const stack = [];
//   for (let i = 0; i < s.length; i++) 
//     let c = s[i];
//     switch (c) 
//       case '(':
//         stack.push(')');
//         break;
//       case '[':
//         stack.push(']');
//         break;
//       case '':
//         stack.push('');
//         break;
//       default:
//         if (c !== stack.pop()) 
//           return false;
//         
//     
//   
//   return stack.length === 0;
// ;
// 简化版本
var isValid = function(s) 
    const stack = [], 
        obj = 
            "(":")",
            "":"",
            "[":"]"
        ;
    for(const x of s) 
        if(x in obj) 
            stack.push(x);
            continue;
        ;
        if(obj[stack.pop()] !== x) return false;
    
    return !stack.length;
;

7. 两数之和,哈希表解法

var twoSum = function (nums, target) 
    const mapHash = new Map();
    for (let i = 0, leng = nums.length; i < leng; i++) 
        const resetNum = target - nums[i];
        // 哈希表有,则返回两数下标
        if (mapHash.has(resetNum)) 
            return [mapHash.get(resetNum), i];
         else 
            // 若没有,存入当前值和下标,key,value
            mapHash.set(nums[i], i);
        
    
    return [-1, -1]
;
twoSum([2, 7, 11, 15], 9)

时间复杂度:O(N),其中 N 是数组中的元素数量。对于每一个元素 x,我们可以 O(1) 地寻找 target - x

空间复杂度:O(N),其中 N 是数组中的元素数量。主要为哈希表的开销。


持续更新中…

以上是关于算法题前端解决方案——JavaScript代码实现的主要内容,如果未能解决你的问题,请参考以下文章

用Javascript方式实现LeetCode中的算法(更新中)

前端项目Javascript Algorithms:使用 JS 实现经典算法与数据结构

前端排序算法总结;前端面试题2.0;JavaScript异步编程

JavaScript 总结面试笔记 + 经典面试题 + 常用算法,帮你搞定前端 JavaScript 面试!

前端算法收集库

算法题:两数之和——JavaScript及Java实现