面试下来几道算法题记录一下

面试下来几道算法题记录一下

爬楼梯

如果每次上楼梯是1步或者2步,那么走完整个台阶有多少中走法

	//整个算法的本质是一个斐那波契数列,也就是说从第三项开始永远是前两项的和
	function fun1(n) {
    
    
        if (n == 1 || n == 2) return n //如果台阶只有1或者2阶梯那就只有这两种走法
        let sum = 0
        let num1 = 1
        let num2 = 2
        for (let i = 3; i <= n; i++) {
    
    
            sum = num1 + num2
            num1 = num2
            num2 = sum
        }
        return sum
    }

找出最长回文子

找出字符串中最长回文子,也就是正着和反着读都一样,例如’上海人海上’

	function strHu(s) {
    
    
        if (s == '' || s.length < 2) {
    
    //如果是空或者长度小于2就直接返回本身
            return s
        }
        if (s.split('').reverse().join('') === s) {
    
    //如果反转后直接相等也直接返回本身
            return s
        }
        let start = 0  //定义一个起始值
        let maxIndex = 1	//定义一个最大长度
        function fun(left, right) {
    
    
            while (left >= 0 && right < s.length && s[left] === s[right]) {
    
    
                if (right - left + 1 > maxIndex) {
    
    
                    maxIndex = right - left + 1
                    start = left
                }
                left--
                right++
            }
        }
        for (let i = 0; i < s.length; i++) {
    
    
            fun(i - 1, i + 1)//奇数对比
            fun(i, i + 1)//偶数对比
        }
        return s.substring(start, start + maxIndex)//从起始值开始截取到最大长度的位置
    }

找出arr中相加==target的元素并返回的他们的下标例如[1,3,5,7] 4 返回[0,1]

	function toTargetIndex(arr, target) {
    
    
        let map = new Map()
        let newArr = undefined
        for (let i = 0; i < arr.length; i++) {
    
    
            if (map.has(target - arr[i])) {
    
    
                newArr = [map.get(target - arr[i]), i]
            } else {
    
    
                map.set(arr[i], i)
            }
        }
        return newArr
    }

树结构扁平化

	function treeToArr(tree, pName) {
    
    
        let arr = []
        for (const item of tree) {
    
    
            item.name = pName ? pName + '-' + item.name : item.name
            let {
    
     children, ...i } = item
            if (children && children.length) {
    
    
                arr.push(...treeToArr(children, item.name))
            }
            arr.push(i)
        }
        return arr
    }

猜你喜欢

转载自blog.csdn.net/cha12138/article/details/129859328