算法题前端解决方案——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异步编程