美文网首页
算法-不重复最长子串

算法-不重复最长子串

作者: McDu | 来源:发表于2021-03-23 11:50 被阅读0次
    /**
     * 题目:字符串出现的不重复最长长度
     * 整体思路:
     * 用一个滑动窗口装没有重复的字符,枚举字符记录最大值即可
     * 对于遇到重复字符如何收缩窗口大小?
     * 我们可以用 map 维护字符的索引,遇到相同的字符,把左边界移动过去即可
     * 挪动的过程中记录最大长度
     */
    var lengthOfLongestSubstring = function (s) {
        let map = new Map();
        let i = -1
        let res = 0
        let n = s.length
        for (let j = 0; j < n; j++) {
            if (map.has(s[j])) {
                i = Math.max(i, map.get(s[j]))
            }
            res = Math.max(res, j - i)
            map.set(s[j], j)
        }
        return res
    };
    
    1. 有一堆整数,把他们尽可能均分
    function makeAlmostEqual(arr, part) {
        let orderedArr = arr.sort((a, b) => b - a)
    
        let res = Array(part).fill(void(0)).map(() => [])
    
        orderedArr.forEach(val => {
            let minArrIdx = getMinArrIdx(res)
            res[minArrIdx].push(val)
        })
    
        return res;
    }
    
    function getSum(arr) {
        return arr.reduce((sum, v) => sum + v, 0)
    }
    
    function getMinArrIdx(arrs) {
        let minIdx = 0;
        arrs.forEach((arr, index) => {
           
            if(getSum(arrs[minIdx]) > getSum(arrs[index])) {
                minIdx = index;
            }
        })
        
        return minIdx;
    }
    makeAlmostEqual([1, 65, 4, 32, 95, 33, 9, 3], 3)
    

    相关文章

      网友评论

          本文标题:算法-不重复最长子串

          本文链接:https://www.haomeiwen.com/subject/uzfthltx.html