js-常见算法操作
字符串操作
判断回文字符串
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function palindrome(str){ // \W匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。 var re = /[\W_]/g; // 将字符串变成小写字符,并干掉除字母数字外的字符 var lowRegStr = str.toLowerCase().replace(re,''); // 如果字符串lowRegStr的length长度为0时,字符串即是palindrome if(lowRegStr.length===0) return true; // 如果字符串的第一个和最后一个字符不相同,那么字符串就不是palindrome if(lowRegStr[0]!=lowRegStr[lowRegStr.length-1]) return false; //递归 return palindrome(lowRegStr.slice(1,lowRegStr.length-1));} |
翻转字符串
思路1:反向遍历字符串
|
1
2
3
4
5
6
|
function reverseString(str){ var tmp = ''; for(var i=str.length-1;i>=0;i--) tmp += str[i]; return tmp} |
思路2:转化成array操作。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
function reverseString2(str){ var arr = str.split(""); var i = 0,j = arr.length-1; while(i<j){ tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; i++; j--; } return arr.join("");} |
PS:什么?你要问为啥不直接操作str? 因为str[i]是只读的,不能str[0]=str[1]这样操作。
再PS:如果允许用reverse(),也可以用'str'.split('').reverse().join('')实现。
生成指定长度随机字符串
PS:配合模糊等效果可以生成个验证码- -
|
1
2
3
4
5
6
7
|
function randomString(n){ var str = 'abcdefghijklmnopqrstuvwxyz0123456789'; var tmp = ''; for(var i=0;i<n;i++) tmp += str.charAt(Math.round(Math.random()*str.length)); return tmp;} |
统计字符串中次数最多字母
PS:利用Object中key的唯一性,利用key来进行筛选,然后计数。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function findMaxDuplicateChar(str) { if(str.length == 1) { return str; } var charObj = {}; for(var i = 0; i < str.length; i++) { if(!charObj[str.charAt(i)]) { charObj[str.charAt(i)] = 1; } else { charObj[str.charAt(i)] += 1; } } var maxChar = '', maxValue = 1; for(var k in charObj) { if(charObj[k] >= maxValue) { maxChar = k; maxValue = charObj[k]; } } return maxChar + ':' + maxValue;} |
数组操作
1. 数组去重
PS: 还是利用Object中key的唯一性,利用key来进行筛选。
|
1
2
3
4
5
6
7
8
9
10
11
|
function unique(arr){ var obj = {} var data = [] for(var i in arr){ if(!obj[arr[i]]){ obj[arr[i]] = true; data.push(arr[i]); } } return data;} |
2. Number数组中最大差值
|
1
2
3
4
5
6
7
8
9
10
|
function getMaxProfit(arr){ var min = arr[0], max = arr[0]; for(var i=0;i<arr.length;i++){ if(arr[i]<min) min = arr[i]; if(arr[i]>max) max = arr[i]; } return max - min;} |
其他常见算法
1. 阶乘
1.1 非递归实现
|
1
2
3
4
5
6
7
8
|
function factorialize(num) { var result = 1; if(num < 0) return -1; if(num == 0 || num == 1) return 1; while(num>1) result *= num--; return result;} |
1.2 递归实现
|
1
2
3
4
5
6
7
8
|
function factorialize(num) { var result = 1; if(num < 0) return -1; if(num == 0 || num == 1) return 1; if(num > 1){ return num*factorialize(num-1); }} |
2. 生成菲波那切数列
PS:斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列主要考察递归的调用。通过定义fibo[i] = fibo[i-1]+fibo[i-2];来生成斐波那契数组。
2.1 强行递归实现
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function getfib(n){ if(n == 0) return 0; if(n == 1) return 1; if(n > 1){ return getfib(n-1) + getfib(n-2); }}function fibo(len){ var fibo = []; for(var i=0;i<len;i++) fibo.push(getfib(i)); return fibo;} |
2.2 简约非递归版
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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;} |
3. 二分查找
PS:二分查找又称折半查找,是在有序数组查找中用到的较为频繁的一种算法,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。
3.1 非递归实现
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function binary_search(arr, key) { var low = 0, high = arr.length - 1; while(low <= high){ var mid = parseInt((high + low) / 2); if(key == arr[mid]){ return mid; }else if(key > arr[mid]){ low = mid + 1; }else if(key < arr[mid]){ high = mid -1; } } return -1;}; |
3.2 递归实现
|
1
2
3
4
5
6
7
8
9
10
11
|
function binary_search2(arr, low, high, key) { if(low > high) return -1; var mid = parseInt((low + high)/2); if(key == arr[mid]) return mid; else if(key > arr[mid]) return binary_search2(arr, mid+1, high, key); else if(key < arr[mid]) return binary_search2(arr, low, mid-1, key);} |
js-常见算法操作的更多相关文章
- touch.js——常见应用操作
touch.js--常见应用操作 基本事件: touchstart //手指刚接触屏幕时触发 touchmove //手指在屏幕上移动时触发 touchend //手指从屏幕上移开时 ...
- Js常见算法实现汇总
/*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.length; for(var ...
- js常见算法
1:实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制. function clone(Ob ...
- JS常见算法题目
最近收集了几个经典JS题目,比较有代表性,分享一下: 1.xiaoshuo-ss-sfff-fe 变为驼峰xiaoshuoSsSfffFe function getCamelCase(str ...
- js常见算法(一)
1.每个单词手字母大写 var capitalizeEveryWord = str => str.replace(/\b[a-z]/g, char => char.toUpperCase( ...
- 常见算法是js实现汇总(转载)
常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...
- 前端常见算法的JS实现
1.冒泡排序 function bubbleSort(arr){ var i = 0, j = 0; for(i=1; i<arr.length; i++){ for(j=0; j<=ar ...
- JS中常见算法问题
JS中常见算法问题 1. 阐述JS中的变量提升(声明提前) 答:将所有的变量提升当当前作用域的顶部,赋值留在原地.意味着我们可以在某个变量声明前就使用该变量. 虽然JS会进行变量提升,但并不会执行真正 ...
- 前端常见算法JS实现
算法是程序的灵魂,一个优秀的前端工程师对算法也是要有所了解的. 排序算法 1. 冒泡排序 //冒泡排序 function bubbleSort(arr){ var i = j = 0; for(i=1 ...
- Hadoop学习笔记—12.MapReduce中的常见算法
一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...
随机推荐
- Go 代码风格和规范
Go 语言写起来类似于C语言,因此熟悉C语言及其派生语言(C++.C#.Objective-C 等)的人都会迅速熟悉这门语言 编码风格 标识符命名规范 在习惯上,Go语言程序员推荐使用驼峰式命名,当名 ...
- Python笔记-备忘
一.向列表添加元素 x.append(y) #末尾添加一个元素 x.extend([y,z]) #末尾添加多个元素 x.insert(index,y) 二.向列表获取元素 x[index] 三.从列表 ...
- jQuery事件绑定和委托实例
本文实例讲述了jQuery事件绑定和委托.分享给大家供大家参考.具体方法如下: jQuery事件的绑定和委托可以用多种方法实现,on() . bind() . live() . delegate ...
- logstash+elasticsearch+kibana搭建日志收集分析系统
来源: http://blog.csdn.net/xifeijian/article/details/50829617 日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散 ...
- Thymeleaf整合到Spring Security,标签sec不起作用
将 pom 文件中的 thymeleaf-extras-springsecurity4 依赖改成 thymeleaf-extras-springsecurity5 <dependency> ...
- Ubuntu系统---进行C++项目开发的工具
Ubuntu系统---进行C++项目开发的工具 在Ubuntu系统下进行C++工作任务,还没接触过.像 Windows + vs 一样,Ubuntu应该也有自己的C++开发工具.网上搜罗了一圈,发现有 ...
- Tcp/IP协议详讲
TCP/IP协议分层详解 目录 TCP/IP 和 ISO/OSI TCP/IP分层模型 数据的封装与分用 其他相关概念 TCP/IP 通信传输流 负责传输的 IP 协议 正文 回到顶部 TCP/IP ...
- python3 基础一
一.python基本运行 1.python特点:(1)python使用C语言开发,但是python不再有C语言中的指针等复杂数据类型,(2)python有很强的面向对象特性,而且简化了面向对象的实现, ...
- PHP获取文件大小的几种方法!
一.get_header($url,true): $url = 'http://www.xxx.com/MoJing_win_x86_64_V5.125.zip'; $res = get_header ...
- python_面向对象——继承
1.继承 class Animal: def __init__(self,name,age,sex): self.name = name self.age = age self.sex = sex d ...