常见算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见算法相关的知识,希望对你有一定的参考价值。
判断一个单词是否是回文?
var str="mamam"; function check(str){ return str== str.split(‘‘).reverse().join(‘‘); } check(str) //true
去掉一组整型数组重复的值
利用一个空对象和空数组,遍历数组元素,每次判断对象中是否存在这个值,如果不存在,将obj[x]设置为1,将这个值push到空数组
function delSame(arr){ var obj={}, res=[]; arr.forEach(function(x){ if(!obj[x]){ obj[x]=1; res.push(x); } }) return arr; }
ES6的方法
let delSame = arr => Array.from(new Set(arr))
统计一个字符串出现最多的字母
var findMax= str =>{ let obj={}, max=0, char=‘‘; for(let i=0;i<str.length;i++){ if(!obj[str[i]]){ obj[str[i]]=1; }else{ obj[str[i]]++; } } for(let k in obj){ if(obj[k]>max){ max=obj[k]; char=k; } } return `max is ${max} , char is ${char}` }
借助临时变量,进行两个整数的交换
//变量的解构赋值 var a = 2, b = 4; let swap=(a,b)=>[a,b]=[b,a] swap(a,b)//[4,2]
找出下列正数组的最大差值比如:
输入 [10,5,11,7,8,9]
输出 6
var findMaxGap= arr=>{ let res=[]; for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ var gap=Math.abs(arr[i]-arr[j]); if(res.indexOf(gap)==-1){ res.push(gap); } } } return res.sort((a,b)=> a-b).pop(); } findMaxGap([10,5,11,7,8,9])
随机生成指定长度的字符串
function random(n){ var str=‘abcdefghijklmnopqrstuvwxyz123456789‘, res=‘‘, l=str.length; for(var i=0;i<n;i++){ res+=str.charAt(Math.floor(Math.random()*l)) } return res; }
实现类似getElementsByClassName 的功能
function queryClassName(node, name) { var starts = ‘(^|[ \n\r\t\f])‘, ends = ‘([ \n\r\t\f]|$)‘;
//包含四种情况,单个单词,首单词,中间单词,微单词。 var array = [], regex = new RegExp(starts + name + ends),
//找个这个节点下的所有元素,遍历这个类数组,如果test符合,就push到新的数组,最后返回这个数组。 elements = node.getElementsByTagName("*"), length = elements.length, i = 0, element; while (i < length) { element = elements[i]; if (regex.test(element.className)) { array.push(element); } i += 1; } return array; }
以上是关于常见算法的主要内容,如果未能解决你的问题,请参考以下文章
有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]