js 中的算法题,那些经常看到的
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;
}
js 中的算法题,那些经常看到的的更多相关文章
- JS中常见算法问题
JS中常见算法问题 1. 阐述JS中的变量提升(声明提前) 答:将所有的变量提升当当前作用域的顶部,赋值留在原地.意味着我们可以在某个变量声明前就使用该变量. 虽然JS会进行变量提升,但并不会执行真正 ...
- JS中的算法与数据结构——排序(Sort)(转)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- JS中的算法与数据结构——排序(Sort)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- js中常见算法
一.面试80%都要问的数组去重 数组去重的方式有多种,其实面试中主要是想靠对对象的理解.还记得我第一次去面试的时候,去重的时候用了2个for循环. //1循环一次 var arr1 = [1,2,3, ...
- Kotlin实现LeetCode算法题之Two Sum
LeetCode介绍 LeetCode是算法练习.交流等多功能网站,感兴趣的同学可以关注下(老司机请超车).页面顶部的Problems菜单对应算法题库,附带历史通过滤.难易程度等信息. 未来计划 打算 ...
- 51nod 1785 数据流中的算法 | STL的应用
51nod 1785 数据流中的算法 题面 动态求平均数.方差.中位数. 题解 这道题的坑: 平均数在答案中是向下取整输出并在后面添加".00" 方差:平方的平均数减去平均数的平方 ...
- 19道常见的JS面试算法题
最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...
- 【JS中循环嵌套常见的六大经典例题+六大图形题,你知道哪几个?】
首先,了解一下循环嵌套的特点:外层循环转一次,内层循环转一圈. 在上一篇随笔中详细介绍了JS中的分支结构和循环结构,我们来简单的回顾一下For循环结构: 1.for循环有三个表达式,分别为: ①定义循 ...
- JS中几种常见的数组算法(前端面试必看)
JS中几种常见的数组算法 1.将稀疏数组变成不稀疏数组 /** * 稀疏数组 变为 不稀疏数组 * @params array arr 稀疏数组 * @return array 不稀疏的数组 */ f ...
随机推荐
- hadoop2.6完全分布式安装HBase1.1
本文出自:http://wuyudong.com/archives/119 对于全分布式的HBase安装,需要通过hbase-site.xml文档来配置本机的HBase特性,由于各个HBase之间通过 ...
- IOS枚举使用
1.方法一: typedef enum { one = 0, two, }Name; 2.方法二: typedef NS_ENUM(NSInteger, name) { one, two }; 注:a ...
- IOS Quartz2D简介
Quartz2D 简介( 后续会有相关应用) 第一部分 绘制直线 代码示例: - (void)drawRect:(CGRect)rect{ //获取图形上下文 CGContextRef cxConte ...
- CocoaPods:管理Objective-c 程序中各种第三方开源库关联
在我们的iOS程序中,经常会用到多个第三方的开源库,通常做法是去下载最新版本的开源库,然后拖拽到工程中. 但是,第三方开源库的数量一旦比较多,版本的管理就非常的麻烦.有没有什么办法可以简化对第三方库的 ...
- json深度详解及org.json库
了解json (Javascript Object Notation) 网站:http://json.org/ english JSON (JavaScript Object Notation) i ...
- Linux开机启动chkconfig命令详解(让MySQL、Apache开机启动)
chkconfig chkconfig在命令行操作时会经常用到.它可以方便地设置和查询不同运行级上的系统服务.这个可要好好掌握,用熟练之后,就可以轻轻松松的管理好你的启动服务了. 注:谨记chkcon ...
- ehcache整合spring本地接口方式
一.简介 ehcache整合spring,可以通过使用echache的本地接口,从而达到定制的目的.在方法中根据业务逻辑进行判断,从缓存中获取数据或将数据保存到缓存.这样让程序变得更加灵活. 本例子使 ...
- ehcache的介绍和使用
ehcache结合spring cache主要注解使用:@Cacheable,@CacheEvict,@CachePut 在语法和配置等方面的使用 可以参考以下网站: 1.非常详细的spring m ...
- MFC双缓冲绘图实例
本人之前一直了解双缓冲绘图的基本原理,但是在研究很久之后才大概知道具体的使用过程,本文将详细介绍本人在实际项目中使用双缓冲绘图的案例. 实现功能:主界面显示某张包含人脸的图片,通过dlib detec ...
- calc 多项式计算 (STL版和非STL版) -SilverN
计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*” ...