js中遇到的算法题不是很多,可以说基本遇不到。但面试的时候,尤其是一些大公司,总是会出这样那样的算法题,考察一个程序员的逻辑思维能力。如下:
1、回文。
回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生收尾回环的情况,也叫回环。如:mamam,redivider.
实现回文不是我们最常用到的for循环,而是reverse的运用。将字符串转化为数组,将数组顺序颠倒后,再转化为字符串,这个过程就实现的回文。
代码的实现:
function back(str){ return str== str.split('').reverse().join(''); }
2、去掉一组整型数组中重复的值
比如输入: [1,13,24,11,11,14,1,2] 输出: [1,13,24,11,14,2] 需要去掉重复的11 和 1 这两个元素
这道题在面试的试题中出现率比较高,主要考察个人对object的使用,利用key来进行筛选。
js的实现代码:
let unique = function(arr){ let hash={}; let data=[]; for (let i=0;i<arr.length;i++){ if (!hash[arr[i]]) { hash[arr[i]]=true; data.push(arr[i]); } } return data }
3、统计一个字符串中出现最多的字母
给出一个字符串,统计出现次数最多的字母。如:“wqeqwhixswiqhdxsq”,其中出现最多的是q.
js算法的实现
function findMax(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; }
4、顺序算法
a、冒泡排序
function mao(arr){ for (let i=0,i<arr.length-1,i++){ for(let j=0;j<arra.length-i-1; j++){
if (arr[i]>arr[j]){
let tem =arr[i];
arr[i]=arr[j];
arr[j] =tem;
}
}
}
return arr;
}
b、快速排序(快排)
function quick(arr){
if (arr.length<=1){ return arr; } let leftArr=[]; let rightArr=[]; let q=arr[0];
for(let i=1; i<arr.length;i++){
if (arr[i]>q){
rightArr.push(arr[i]);
} else{
leftArr.push(arr[i]);
}
} return [].concat(quick(leftArr),[q],quick(rightArr)); }
5、不需要借助第三个临时变量,实现两个变量的交换
js实现方法:
function swap(a,b){ b=b-a; a=a+b; b=a-b; return [a,b]; }
6、斐波那契数列
js的实现方法
function getFib(n){ var fibairr =[]; var i=0; while(i<n) { if (i<=1){ fibarr.push(i); } else{ fibarr.push(fibarr[i-1]) } i++; } return fibarr; }
7、找出下列正整数组的最大差值
输入的数组是[10,5,11,7,8,9]
输出 6
js的实现方法:
function getMaxPro(arr){ var minPrice=arr[0]; var maxProfit=0; for (var i=0;i<arr.length;i++){ var currentPrice=arr[i]; minPrice=Math.min(minPrice,currentPrice); var potentialProfit =currenrPrice-minPrice; maxProfit=Math.max(maxProfit,potentialProfit); } return maxProfit; }
8、随机生成指定长度的字符串
比如指定的长度为8
js的实现方法:
function random(n){ let str='abcdefghijkmnopqrstuvwxyz9876543210'; let tmp='', i=0, l=str.length; for(i=0;i<n;i++){ tmp +=str.charAt(Math.floor(Math.random()*l)) } return tmp; }