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;
}

最新文章

  1. 多线程映射工具——ThreadLocal
  2. 深入理解CSS中的层叠上下文和层叠顺序(转)
  3. C#实现通过Gzip来对数据进行压缩和解压
  4. SiteMesh3 介绍和使用
  5. 关于hadoop2.4.1伪分布式系统的搭建
  6. nginx-url重写
  7. FormsAuthentication知多少
  8. HDU 6043 KazaQ&#39;s Socks (规律)
  9. 动态IP解析
  10. picasso图片缓存框架
  11. IE浏览器打印的页眉页脚设置解决方法
  12. ARM汇编指令集_学习笔记(1)
  13. pyspider爬虫框架webui简介-爬取阿里招聘信息
  14. Java并发之Thread类的使用
  15. python生成excel测试数据
  16. Ubuntu 16.04下GDB调试
  17. 小R的树(权限题)
  18. java细节知识
  19. POJ3268(Silver Cow Party)
  20. Windows + Ubuntu双系统时间不一致

热门文章

  1. 操作数据库系统(OLTP)和联机分析处理系统(OLAP)的区别
  2. C++非类型模板参数
  3. iOS开发之网络数据解析--中文输出
  4. android 进程/线程管理(四)----消息机制的思考(自定义消息机制)
  5. qsort
  6. mysql中出现Incorrect DECIMAL value: &#39;0&#39; for column &#39;&#39; at row -1错误解决方案
  7. HTML实体对照表
  8. Begin to record my bologs....
  9. Centos 部署Keepalive高可用软件
  10. 19 图形用户界面编程 - 《Python 核心编程》