摘要:在一段時間的學(xué)習(xí)之后,我總結(jié)羅列了前端中常見見的幾個算法一排序算法排序算法是比較開發(fā)的算法之一,方法種類較多,在此列舉兩種簡單的排序算法冒泡排序和快速排序。
雖說我們很多時候前端很少有機會接觸到算法,但對算法的理解和掌握是一個優(yōu)秀工程師的評價標準之一,而且當我們面對較為復(fù)雜的問題,這些基礎(chǔ)知識的積累可以幫助我們更好的優(yōu)化解決思路。在一段時間的學(xué)習(xí)之后,我總結(jié)羅列了前端中常見見的幾個算法:
一:排序算法
排序算法是比較開發(fā)的算法之一,方法種類較多,在此列舉兩種簡單的排序算法:冒泡排序和快速排序。
冒泡排序其實就是通過比較相鄰位置的元素大小,如果左邊比右邊大,就交換位置,繼續(xù)比較,實際上就是每輪比較都得出一個最大值(或者最小值)。然后通過n-1輪比較,就能得出一個排好序的序列(通過設(shè)置一個flag,當數(shù)組基本有序的時候其實不一定需要比較到n-1輪)。
function bubbleSort(arr){ for(var i=1;iarr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } return arr; }
快速排序簡單來講就是我們選定一個數(shù),然后比它小的都放在它左邊,大于等于它的都放在它右邊,那么這個時候?qū)@個數(shù)來講他的位置已經(jīng)排到了正確的地方了,接下來要做的就是在它的左右兩邊分別再進行類似操作。
function quickSort(arr,l,r){ var i,j,x; if(l=x){ j--; } if(i 二:階乘算法
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)); } }四:翻轉(zhuǎn)字符串算法
function reverseString(str) { var tmp = ""; for (var i = str.length - 1; i >= 0; i--) { tmp += str.charAt(i); } return tmp; }第二種翻轉(zhuǎn)字符串算法:
function reverseString(s) { var arr = s.split(""); var i = 0, j = arr.length - 1; while (i < j) { var t = arr[i]; arr[i] = arr[j]; arr[j] = t; i++; j--; } return arr.join(""); }五:整型數(shù)組去重算法
主要考察程序員對Object的使用,利用key來進行篩選。
function unique(arr) var hashTable = {}; var data = []; for(var i = 0, l = arr.length; i < l; i++) { if(!hashTable[arr[i]]) { hashTable[arr[i]] = true; data.push(arr[i]); } } return data; }六:數(shù)組中最大差值
function getMaxProfit(arr) { var minPrice = arr[0]; var maxPrice = arr[0]; var maxProfit = 0; for (var i = 0; i < arr.length; i++) { var currentPrice = arr[i]; minPrice = Math.min(minPrice, currentPrice); maxPrice = Math.max(maxPrice, currentPrice); } maxProfit = Math.max(maxPrice-minPrice,maxPrice); 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; }八:統(tǒng)計字符串中次數(shù)最多字母
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; }九:生成菲波那切數(shù)列數(shù)組
斐波那契數(shù)列,又稱黃金分割數(shù)列,指的是這樣一個數(shù)列:0、1、1、2、3、5、8、13、21、34、……在數(shù)學(xué)上,斐波納契數(shù)列主要考察遞歸的調(diào)用。通過定義fibo[i] = fibo[i-1]+fibo[i-2];來生成斐波那契數(shù)組。
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; }以上幾個前端中經(jīng)常會出現(xiàn)的小算法是學(xué)習(xí)中的練習(xí)和總結(jié),整理此文如果有錯誤希望小伙伴們積極指正,有更好更簡潔的算法知識也希望不吝分享,以求共同進步。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/80855.html
摘要:而在面試過程中,也是經(jīng)常會遇到的,所以,無論是面試準備還是日常開發(fā),我們都應(yīng)該關(guān)注這方面的東西。二分法的基本做法是確定要查找的區(qū)間。區(qū)間內(nèi)選取二分點。根據(jù)二分點的值,綜合左右區(qū)間情況以及求解的目的,舍去一半無用的區(qū)間。 showImg(https://images.pexels.com/photos/935977/pexels-photo-935977.jpeg); 前言 面試是你進入...
摘要:這個月的計劃本來是對基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)做一個沉淀,但是,但是,但是這個月的的狀態(tài)就是工作工作既然這樣就總結(jié)下這個月的工作吧。 前言 目標是每個月寫一篇文章,對從事編程開發(fā)的基礎(chǔ)知識做一個學(xué)習(xí)總結(jié)。這個月的計劃本來是對基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)做一個沉淀,但是,但是,但是......這個月的的狀態(tài)就是工作工作...既然這樣就總結(jié)下這個月的工作吧。 工作內(nèi)容 促銷活動的抽獎工具,具備如下功能: 根據(jù)不同...
摘要:如果沒有學(xué)習(xí)過計算機科學(xué)的程序員,當我們在處理一些問題時,比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無疑是一個很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見 CSS 布局方式詳見: 一些常見的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...
摘要:如果沒有學(xué)習(xí)過計算機科學(xué)的程序員,當我們在處理一些問題時,比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無疑是一個很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見 CSS 布局方式詳見: 一些常見的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...
閱讀 3584·2019-08-30 15:55
閱讀 1380·2019-08-29 16:20
閱讀 3664·2019-08-29 12:42
閱讀 2667·2019-08-26 10:35
閱讀 1016·2019-08-26 10:23
閱讀 3415·2019-08-23 18:32
閱讀 904·2019-08-23 18:32
閱讀 2899·2019-08-23 14:55