前端面試題總結(二)

1、統計一個字符串出現最多的字母

<script>
  let findMaxDuplicateChar = function(str){
    if(str.lenght === 1){
      return str;
    }
    var charObj = {};
    for(let i=0, len=str.length; i<len; i++){
      if(!charObj[str.charAt(i)]){
        charObj[str.charAt(i)] = 1;
      }else{
        charObj[str.charAt(i)] += 1;
      }
    }
    console.log(charObj);
    let maxChar = '',maxVal = 1;
    for(let k in charObj){
      if(charObj[k] >= maxVal){
        maxChar = k;
        maxVal = charObj[k];
      }
    }
    return maxChar;
  }
</script>

2、排序算法
冒泡排序:依次比較大小,小的與大的進行位置交換

<script>
  function bubbleSort(arr){
    for(let i=0,len=arr.length; i<len-1; i++){
      for(let j=0; j<len; j++){
        if(arr[i]>arr[j]){
          let item = arr[i];
          arr[i] = arr[j];
          arr[j] = item;
        }
      }
    }
    return arr
  }
</script>

快速排序:算法參考某個元素的值,將小於它的值放到左數組中,將大於它的值放到有數組中,然後再進行遞歸操作,返回合併的數組就是已經排好序的數組了


<script>
  function quickSort(arr) {
    if(arr.length<=1){
      return arr;
    }
    let leftArr = [],rightArr = [],val = arr[0];
    for (let i = 1, len = arr.length; i < len; i++) {
      if(arr[i] > val){
        rightArr.push(arr[i])
      }else{
        leftArr.push(arr[i])
      }
    }
    return [].concat(quickSort(leftArr),[val],quickSort(rightArr));
  }
</script>

3、不借助臨時變量,進行兩個整數的交換

<script>
  function swap(a,b) {
    b = b - a;  //a=2, b=6
    a = a + b;  //a=8 , b=6
    b = a - b;  //a= 8, b=2
    return [a,b]
  }
  console.log(swap(2,8))  //[8,2]
</script>

4、找出輸入數組的最大差值,如:輸入[10,5,11,7,8,9], 輸出:6

<script>
  function getMaxProfit(arr) {
    var len= arr.length;
    if(len<=1){
      return arr
    }
    arr.sort(function(a,b){
      return a-b;
    });
    return arr[len-1] - arr[0]
  }
</script>



<script>
  function getMaxProfit(arr) {
    let minVal = arr[0],maxVal = 0;
    for (let i = 1, len = arr.length; i < len; i++) {
      let currentVal = arr[i];
      minVal = Math.min(currentVal,minVal);
      let potentialVal = currentVal - minVal;
      maxVal = Math.max(potentialVal,maxVal);
    }
    return maxVal;
  }
</script>

5、隨機生成指定長度的字符串

<script>
  function getRandomStr(num) {
    let str = "abcdefg1234567890higkmlopqrstuvwxyz";
    let temp='',
        i=0,
        len = str.length;
    for (i; i < num; i++) {
      temp += str.charAt(Math.floor(Math.random()*len)) ;
    }
    return temp;
  }
</script>

6、實現類似getElementsByclassName的功能

<script>
  function queryClassName(node, name) {
    var start = '(^|[\n\r\t\f])',
      end = '([\n\r\t\f]|$)';
    var arr = [],
      regex = new RegExp(start + name + end),
      elements = document.getElementsByTagName('*'),
      length = element.length,
      i = 0,
      element;
    while (i < length) {
      element += elements[i];
      if (regex.test(element.className)) {
        arr.push(element)
      }
      i++;
    }
    return arr;
  }
</script>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章