1. 程式人生 > >JS面試常見演算法題

JS面試常見演算法題

學習資料結構與演算法對於工程師去理解和分析問題都是有幫助的。如果將來當我們面對較為複雜的問題,這些基礎知識的積累可以幫助我們更好的優化解決思路。下面羅列在前端面試中經常撞見的幾個問題吧。
1.統計一個字串出現最多的字母和出現的次數
第一種方法:

var str = 'abcdeddd'
var n = {}
for(var i = 0; i < str.length; i++) {
  var char = str.charAt(i)
  if(n[char]){
    n[char]++    //計算出現的次數
  }else{
    n[char] = 1  //第一次出現標記為1
} } console.log(n) var max = 0 var maxChar = null for(var key in n){ if(max<n[key]){ max = n[key] maxChar = key } } console.log('最多的字元' + maxChar) //"最多的字元d" console.log('出現次數' + max) //"出現次數4"

第二種方法:

var str = 'abcdeddd'
var n = {}
var moreStr = ''
for(var i = 0;i < str.length;i++) {
  var
more =str[i] if(!n[more]) { n[more] = 0 } n[more]++ if(moreStr == '' || n[more]>n[moreStr]) moreStr = more } console.log(moreStr) //"d" console.log(n[moreStr]) //4

2.陣列去重
ES5方法:

var arr = [1,2,3,4,5,4,3,2]
function test(arr) {
var newArr = []
var item
for(var i = 0, len = arr.length
; i < len; i++) { item = arr[i] if(newArr.indexOf(item) === -1) { newArr.push(item) } } return newArr } console.log(test(arr)) //[1, 2, 3, 4, 5]

ES6方法:

function test(arr) {
  return Array.from(new Set(arr))
}
console.log(test(arr))  //[1, 2, 3, 4, 5]

3.排序演算法

1.氣泡排序:氣泡排序演算法就是依次比較大小,小的的大的進行位置上的交換。

var arr = [10,20,5,8,21,100,99]
function test() {
  for(var i = 0;i<arr.length-1;i++) {
    for(var j = i+1; j < arr.length; j++) {
     if(arr[i]>arr[j]){
       var temp = arr[i]
       arr[i] = arr[j]
       arr[j] = temp
     }
    }
  }
  console.log(arr)   //[5, 8, 10, 20, 21, 99, 100]
}test()

2.Sort排序

var arr = [10,20,5,8,21,100,99]
arr.sort(function(a,b){
  return a-b
})
console.log(arr) //[5, 8, 10, 20, 21, 99, 100]