-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathjs.js
86 lines (72 loc) · 1.81 KB
/
js.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//@ts-check
// console.log = () => {}
/**
* @param {number[]} nums
* @param {number} m
* @param {number} k
* @return {number}
*/
var maxSum = function (nums, m, k) {
console.log('###########')
let _sub = nums.slice(0, k)
let map = _sub.reduce((acc, cur) => {
if (!acc[cur]) {
acc[cur] = 0
}
acc[cur]++
return acc
}, {})
let distinctCount = Object.keys(map).length
let sum = _sub.reduce((acc, cur) => acc + cur, 0)
let maxSum = distinctCount >= k - (k - m) ? sum : 0
// console.log(
// `0 maxSum=${maxSum}`,
// `map=${JSON.stringify(map)}`,
// `distinctCount=${distinctCount}`,
// `sum=${sum}`,
// `m=${m}`,
// `k=${k}`
// )
for (let i = 1; i < nums.length - k + 1; i++) {
const left = nums[i - 1]
const right = nums[i + k - 1]
if (left === right) {
// console.log(
// `${i} maxSum=${maxSum}`,
// `map=${JSON.stringify(map)}`,
// `distinctCount=${distinctCount}`,
// `sum=${sum}`,
// `m=${m}`,
// `k=${k}`,
// `left=${left}`,
// `right=${right}`
// )
continue
}
const wasLeftDistinct = map[left] === 1
const isRightDistinct = !(right in map) || map[right] === 0
map[left]--
if (map[left] === 0) {
delete map[left]
}
if (!(right in map)) {
map[right] = 0
}
map[right]++
if (wasLeftDistinct) distinctCount--
if (isRightDistinct) distinctCount++
sum = sum - left + right
if (distinctCount >= k - (k - m)) maxSum = Math.max(maxSum, sum)
// console.log(
// `${i} maxSum=${maxSum}`,
// `map=${JSON.stringify(map)}`,
// `distinctCount=${distinctCount}`,
// `sum=${sum}`,
// `m=${m}`,
// `k=${k}`,
// `left=${left}`,
// `right=${right}`
// )
}
return maxSum
}