前端会遇到的算法
1.判断一个单词是否是回文(比如 mamam、redivider) function checkPalindrom(str) { return str == str.split('').reverse().join(''); } console.log(checkPalindrom('mamam')); //true
console.log(checkPalindrom('guojing')); //false
2.去掉一整型数组重复的值 比如输入: [1,13,24,11,11,14,1,2] 输出: [1,13,24,11,14,2] 考察对Object的使用,利用key来进行筛选 const unique = function(arr) { let hashTable = {}; let data = []; for(let i=0,l=arr.length;i<l;i++) { if(!hashTable[arr[i]]) { hashTable[arr[i]] = true; data.push(arr[i]); } } return data } module.exports = unique;
3.统计一个字符串出现最多的字母 输入 : afjghdfraaaasdenas 输出 : a function findMaxDuplicateChar(str) { if(str.length == 1) { return str; } let charObj = {}; for(let i=0;i<str.length;i++) { if(!charObj[str.charAt(i)]) { charObj[str.charAt(i)] = 1; }else{ charObj[str.charAt(i)] += 1; } } let maxChar = '', maxValue = 1; for(var k in charObj) { if(charObj[k] >= maxValue) { maxChar = k; maxValue = charObj[k]; } } return maxChar; } module.exports = findMaxDuplicateChar;
4.排序算法
动画演示地址:http://math.hws.edu/eck/jsdemo/sortlab.html function mySort(arr) { for(let i = 0,l=arr.length;i<l-1;i++) { for(let j = i+1;j<l;j++) { if(arr[i]>arr[j]) { let tem = arr[i]; arr[i] = arr[j]; arr[j] = tem; } } } return arr; } module.exports = mySort;
5.不借助临时变量,进行两个整数的交换 输入 a = 2, b = 4 输出 a = 4, b =2 { b = b-a; a = b+a; b = a-b; }
斐波那契数列的曲线:0、1、1、2、3、5、8、13、21、34、……
6.使用canvas 绘制一个有限度的斐波那契数列的曲线 https://codepen.io/Jack_Pu/pen/LRaxZB function getFibonacci(n) { var fibarr = []; var i = 0; while(i<n) { if(i<=1) { fibarr.push(i); }else { fibarr.push(fibarr[i-1] + fibarr[i-2]) } i++; } return fibarr; }
参考:
http://web.jobbole.com/88471/
http://math.hws.edu/eck/jsdemo/sortlab.html(排序算法演示)
https://codepen.io/Jack_Pu/pen/LRaxZB(canvas绘制曲线)
工欲善其事 必先利其器