/**
* 题目:字符串出现的不重复最长长度
* 整体思路:
* 用一个滑动窗口装没有重复的字符,枚举字符记录最大值即可
* 对于遇到重复字符如何收缩窗口大小?
* 我们可以用 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
};
- 有一堆整数,把他们尽可能均分
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)
网友评论