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]
    原文作者:youjinli122
    原文地址: https://blog.csdn.net/youjinli122/article/details/77922599
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞