算法练习

629 阅读1分钟

统计一个字符串出现最多的字母:给出一段英文连续的英文字符窜,找出重复出现次数最多的字母。

思路:统计字符串中每个字母出现的次数,输出出现次数最多的字母

var func = function(str) {
    //统计每个字母出现的次数
    var obj = {}
    for (let i =0; i < str.length; i++) {
        if (!obj[str.charAt(i)]) {
            obj[str.charAt(i)] = 1
        } else {
            obj[str.charAt(i)] ++
        }
    }
    // obj 对象的key值是字符名,value是出现次数
    // 找出value最大的key并输出就可以了
    var max = 0, zifu
    for (keyValue in obj) {
        if (obj[keyValue] > max) {
            max = obj[keyValue]
            zifu = keyValue
        }
    }
    return zifu
}

找出下列正数组的最大差值

例子:

输入 [10,5,11,7,8,9]
输出 6
思路:二重循环遍历,每个数都互相作差,取差最大的输出

var func = function(arr) {
    var sum = 0
    for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length; j++) {
            if (arr[i] - arr[j] > sum) {
                sum = arr[i] - arr[j]
            }
        }
    }
    return sum
}

斐波那契数列:1、1、2、3、5、8、13、21。输入n,输出数列中第n位数的值。

var func = function(n) {
    var arr = [1, 1]
    for (let i = 1; i < n; i++) {
        arr.push(arr[i-1] + arr[i])
    }
    return arr[n-1]
}

数组去重

var func = function(arr, key) {
    // 普通数组去重
    if (!key) {
        var uniArr = []
        arr.map(item => {
            const index = uniArr.findIndex(value => value === item)
            if (index === -1) {
                uniArr.push(item)
            }
        })
        return uniArr
    } else { // 对象数组根据key值去重
        var uniArr = []
        arr.map(item => {
            const index = uniArr.findIndex(value => value[key] === item[key])
            if (index === -1) {
                uniArr.push(item)
            }
        })
        return uniArr
    }
}