• javascript算法题


    面试现公司很喜欢考一些js算法题。当时我就烦这些公司,工作从来没用过,考来有什么用。经过多轮面试,终于认清楚了一个事实,是工作找你,不是你找工作。于是总结面试常考的一些算法题,供大家参考。

    问题一:回文函数

    function checkPalindrom(str) {
        return str == str.split('').reverse().join('');
    }
    console.log(checkPalindrom('mamam'))
    
    • 1
    • 2
    • 3
    • 4

    问题二:数组去重

    let unique = function (arr) {
        let hashTable = {};
        let data = [];
        for (let i = 0, l = arr.length; i < l; i++) {
            if (!hashTable[arr[i]]) {
                hashTable[arr[i]] = true;
                data.push(arr[i]);
            }
        }
        return data
    }
    console.log(unique([3, 4, 3, 2, 4, 3]));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    问题三:字符串中出现最多的字符

    function findMaxDuplicateChar(str) {
        if (str.length == 1) {
            return str;
        }
        let charObj = {};
        for (let i = 0; i < str.length; i++) {
            if (!charObj[str.charAt(i)]) {
                charObj[str.charAt(i)] = 1;
            } else {
                charObj[str.charAt(i)] += 1;
            }
        }
        let maxChar = '',
                maxValue = 1;
        for (var k in charObj) {
            if (charObj[k] >= maxValue) {
                maxChar = k;
                maxValue = charObj[k];
            }
        }
        return maxChar;
    }
    console.log(findMaxDuplicateChar('afjghdfraaaasdenas'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    问题四:冒泡排序

    function bubbleSort(arr) {
        for (var i = 0, l = arr.length; i < l - 1; i++) {
            for (var j = i + 1; j < l; j++) {
                if (arr[i] > arr[j]) {
                    var tem = arr[j];
                    arr[j] = arr[i];
                    arr[i] = tem;
                }
            }
        }
        return arr;
    }
    console.log(bubbleSort([3, 4, 5, 2, 3, 4, 4, 6766, 6]));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    问题五:快速排序

    
    function quickSort(arr) {
        if (arr.length <= 1) {
            return arr;
        }
        let leftArr = [], rightArr = [], q = arr[0];
        for (var i = 1, l = arr.length; i < l; i++) {
            if (arr[i] > q) {
                rightArr.push(arr[i]);
            } else {
                leftArr.push(arr[i]);
            }
        }
        return [].concat(quickSort(leftArr), [q], quickSort(rightArr));
    }
    console.log(quickSort([3, 4, 5, 2, 3, 4, 4, 6766, 6]));
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    问题六:不借助临时变量,进行两个整数的交换

    function swap(a, b) {
        b = b - a;
        a = a + b;
        b = a - b;
        return [a, b];
    }
    console.log(swap(4, 8));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    问题七:找出下列正数组的最大差值

    
    function getMaxProfit(arr) {
        var minPrice = arr[0], maxProfit = 0;
        for (var i = 0, l = arr.length; i < l; i++) {
            var currentPrice = arr[i];
            minPrice = Math.min(minPrice, currentPrice);
            var potentialProfit = currentPrice - minPrice;
            maxProfit = Math.max(maxProfit, potentialProfit);
        }
        return maxProfit;
    }
    console.log(getMaxProfit([3, 4, 5, 2, 3, 4, 4, 6766, 6]));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    问题八:随机生成指定长度的字符串

    
    function randomString(n) {
        let str = 'abcdefghijklmnopqrstuvwxyz9876543210';
        let tmp = '', l = str.length;
        for (var i = 0; i < n; i++) {
            tmp = tmp + str.charAt(Math.floor(Math.random() * l));
        }
        return tmp;
    }
    console.log(randomString(3));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    问题九:二分查找算法

    function binarrySearch(arry, start, stop, num) {
        if (stop - start == 1) {
            if (arry[stop] == num) {
                return stop;
            }
            if (arry[start] == num) {
                return start;
            }
            return -1;
        }
        var center = Math.floor((stop + start) / 2);
        if (arry[center] != num) {
            return num > arry[center] ? binarrySearch(arry, center, stop, num) : binarrySearch(arry, start, center, num);
        }
        return center;
    }
    var arry = [1, 3, 4, 6, 8, 9]
    console.log(binarrySearch(arry, 0, arry.length, 9))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    问题十:使用闭包获取每个li的index

     var list = document.querySelectorAll('#test li');
        for (var i = 0, l = list.length; i < l; i++) {
            list[i].onclick = (function (num) {
                return function () {
                    console.log(num)
                }
            })(i)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    
    <ul id="test">
        <li>第一li>
        <li>第二li>
        <li>第三li>
    ul>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    区块链产业快速发展 和数集团开启区块链应用新时代
    基于Dijkstra、A*和动态规划的移动机器人路径规划(Matlab代码实现)
    走进开源,拥抱开源
    走进Redis-扯扯集群
    xctf攻防世界 Web高手进阶区 easytornado
    Oracle 19c 可插拔数据库PDB的创建方式
    说一说HTTP1.0、1.1、2.0版本区别和优化
    生产计划体系完整解决方案(2) : 复杂大规模问题之 - 分区规划
    opencv安装成功之后运行代码还是出错
    野火霸天虎 STM32F407 学习笔记_3 尝试寄存器映射方式点亮 LED 灯
  • 原文地址:https://blog.csdn.net/Candy5204/article/details/126976378