Bootstrap

javascript算法题

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

问题一:回文函数

function checkPalindrom(str) {
    return str == str.split('').reverse().join('');
}
console.log(checkPalindrom('mamam'))

问题二:数组去重

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]));

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

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'))

问题四:冒泡排序

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]));

问题五:快速排序


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]));

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

function swap(a, b) {
    b = b - a;
    a = a + b;
    b = a - b;
    return [a, b];
}
console.log(swap(4, 8));

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


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]));

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


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));

问题九:二分查找算法

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))

问题十:使用闭包获取每个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)
    }
}

<ul id="test">
    <li>第一</li>
    <li>第二</li>
    <li>第三</li>
</ul>

;