虽说我们很多时候前端很少有机会接触到算法,但对算法的理解和掌握是一个优秀工程师的评价标准之一,而且当我们面对较为复杂的问题,这些基础知识的积累可以帮助我们更好的优化解决思路。在一段时间的学习之后,我总结罗列了前端中常见见的几个算法:
一:排序算法
排序算法是比较开发的算法之一,方法种类较多,在此列举两种简单的排序算法:冒泡排序和快速排序。冒泡排序其实就是通过比较相邻位置的元素大小,如果左边比右边大,就交换位置,继续比较,实际上就是每轮比较都得出一个最大值(或者最小值)。然后通过n-1轮比较,就能得出一个排好序的序列(通过设置一个flag,当数组基本有序的时候其实不一定需要比较到n-1轮)。
function bubbleSort(arr){
for(var i=1;i<arr.length;i++){
for(var j=0;j<arr.length-i;j++){
var temp;
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
快速排序简单来讲就是我们选定一个数,然后比它小的都放在它左边,大于等于它的都放在它右边,那么这个时候对这个数来讲他的位置已经排到了正确的地方了,接下来要做的就是在它的左右两边分别再进行类似操作。
function quickSort(arr,l,r){
var i,j,x;
if(l<r){
i=l;
j=r;
x=arr;
while(i<j){
while(i<j&&arr[j]>=x){
j--;
}
if(i<j){
arr=arr[j];
}
while(i<j&&arr<x){
i++;
}
if(i<j){
arr[j]=arr;
}
}
arr=x;
//递归调用
quickSort(arr,i+1,r);
quickSort(arr,l,i-1);
}
return arr;
}
二:阶乘算法
function factorialize(num) {
var result = num;
if (num < 0) {
return -1;
} else if (num === 0 || num === 1) {
return 1;
} else {
while (num > 1) {
num--;
result *= num;
}
}
return result;
}
三:回文字符串判断
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
function palindrome(str) {
// 删除字符串中不必要的字符
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;
} else {
return palindrome(lowRegStr.slice(1, lowRegStr.length - 1));
}
}
四:翻转字符串算法
function reverseString(str) {
var tmp = "";
for (var i = str.length - 1; i >= 0; i--) {
tmp += str.charAt(i);
}
return tmp;
}
第二种翻转字符串算法:
function reverseString(s) {
var arr = s.split('');
var i = 0, j = arr.length - 1;
while (i < j) {
var t = arr;
arr = arr[j];
arr[j] = t;
i++;
j--;
}
return arr.join('');
}
五:整型数组去重算法
主要考察程序员对Object的使用,利用key来进行筛选。
function unique(arr)
var hashTable = {};
var data = [];
for(var i = 0, l = arr.length; i < l; i++) {
if(!hashTable[arr]) {
hashTable[arr] = true;
data.push(arr);
}
}
return data;
}
六:数组中最大差值
function getMaxProfit(arr) {
var minPrice = arr[0];
var maxProfit = 0;
for (var i = 0; i < arr.length; i++) {
var currentPrice = arr;
minPrice = Math.min(minPrice, currentPrice);
var potentialProfit = currentPrice - minPrice;
maxProfit = Math.max(maxProfit, potentialProfit);
}
return maxProfit;
}
七:随机指定长度字符串
function randomString(n) {
var str = 'abcdefghijklmnopqrstuvwxyz9876543210';
var tmp = '';
var l = str.length;
for(var i = 0; i < n; i++) {
tmp += str.charAt(Math.floor(Math.random() * l));
}
return tmp;
}
八:统计字符串中次数最多字母
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;
}
九:生成菲波那切数列数组
斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列主要考察递归的调用。通过定义fibo = fibo[i-1]+fibo[i-2];来生成斐波那契数组。
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;
}
以上几个前端中经常会出现的小算法是学习中的练习和总结,整理此文如果有错误希望小伙伴们积极指正,有更好更简洁的算法知识也希望不吝分享,以求共同进步。
分享到:
相关推荐
虽然说在前端很少有机会接触到算法,大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一...下面这篇文章就给大家总结了在前端JS面试中常见的算法问题,有需要的朋友们可以参考借鉴,下面来一起看看吧。
总结来说,"前端 RSA 分段加密算法"是一种确保前端数据安全的策略,它利用RSA非对称加密的特性,结合分段加密的方法,处理大长度的数据,使得在前端环境中也能实现高效且安全的数据加密。"jsencrypt.min.js"库为...
前端面试大全、前端常见问题和原理总结、前端面试题、前端面试经验、前端知识持续更新中,包括:JavaScript、Vue、Webpack、TypeScript、html、css、前端架构、前端算法、前端工程搭建、前端职场、React、技术选型、...
前端面试 前端面试大全、前端常见问题和原理总结、前端面试题、前端面试经验JavaScript、Vue、Webpack、TypeScript、html、css、前端架构、前端算法、前端工程搭建、前端职场、React、技术选型、移动端适配、h5、...
总结来说,该研究结合RBF神经网络和WSN的分簇路由策略,设计了一种能有效选择前端网络节点的算法,旨在降低能量消耗,减少信息冗余,提高网络效率和生存时间。这种方法对于优化WSN的能源管理,特别是在资源有限的...
总结来说,二分查找是一种在有序数据结构中快速查找的算法,它利用了数据的有序性,通过不断地缩小查找区间来提高查找效率。在前端开发中,掌握这种算法能够帮助我们编写出更加高效、优化的代码,应对大数据量的场景...
在给定的压缩包文件"前端总结、手写代码、数据结构与算法 Leetcode、源码解析.zip"中,我们可以挖掘出多个关键的学习资源和知识点,涵盖了前端开发、编程实践以及算法基础等多个方面。以下是对这些主题的详细阐述: ...
在第五章总结与展望中,作者总结了本文的研究成果,并展望了未来的研究方向。 本文的主要贡献在于: 1. 提出了LCSS改进方案和改进型LCSS采样滤波算法,提高了非均匀采样滤波算法的精度和效率。 2. 设计了一种动态...
在IT行业中,前端开发是至关重要的领域,涵盖了各种技术栈,包括Vue.js、React以及算法。这些技术在构建现代Web应用程序中发挥着核心作用。本文将深入探讨Vue、React和算法这三个关键知识点,并结合给定的压缩包文件...
总结,国密算法SM2是一种强大的安全工具,结合前端js库sm-crypto,可以在Web应用中实现安全的数据加解密和身份认证。理解并熟练运用这些技术,对于提升我国信息化系统的安全性具有重要意义。在实际开发中,开发者...
总结来说,数据结构和算法是前端开发的基础,也是衡量开发者技术深度的重要标准。熟练掌握并能灵活应用,不仅能在面试中脱颖而出,更能提升日常开发的效率和质量。对于前端工程师而言,不断学习和深入理解这些知识,...
这篇“Matlab各种常见算法代码总结”涵盖了多个领域的经典算法,旨在帮助开发者更好地理解和应用这些算法。下面将对提及的一些关键算法进行详细介绍。 1. **Floyd最短路算法**:Floyd-Warshall算法是一种用于解决...
个人实战积累的成果,基于国密算法的总结,希望可以帮到您 亲们下载我任何一个付费资源后,即可私信联系我免费下载其他相关资源哦~ 个人实战积累的成果,基于国密算法的总结,希望可以帮到您 亲们下载我任何一个...
通过MATLAB的LiveLink for COMSOL功能,可以在MATLAB环境中调用COMSOL模型,实时获取仿真结果并反馈到遗传算法中,从而进行迭代优化。 "comsol遗传算法"是指在COMSOL中直接应用遗传算法进行优化的一种方式。虽然...
### 前端算法基础与实战 #### 一、引言 随着前端技术的发展,算法在前端开发中的重要性日益凸显。扎实的算法基础不仅能够帮助开发者写出更高质量的代码,还能在求职过程中脱颖而出。本文将针对前端开发中最常见的...
近年来,SLAM算法不断发展,出现了许多创新方法。以下是对一些新近SLAM算法的概述,重点关注ORB-SLAM2这一重要的里程碑式算法。 ORB-SLAM2是2015年提出的一种单目SLAM解决方案,随后在2016年进行了更新,增加了双目...
【字节面试算法题总结大全】的描述中提到,算法题在面试中扮演着重要的角色,尤其是对于希望进入大型科技公司的求职者来说,无论是前端还是其他语言的开发者,都需要具备一定的算法基础。算法题虽然在实际开发中可能...
总结起来,通过“剪叶子”算法,我们可以有效地搜索树形结构,结合Vue.js的组件化和响应式特性,可以构建出高效、交互友好的前端搜索功能。这不仅能够帮助用户快速定位所需信息,也有助于提升项目的整体质量与用户...