-
Notifications
You must be signed in to change notification settings - Fork 4
/
1560.Most_Visited_Sector_in_a_Circular_Track.js
112 lines (111 loc) · 2.89 KB
/
1560.Most_Visited_Sector_in_a_Circular_Track.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/**
* @param {number} n
* @param {number[]} rounds
* @return {number[]}
*/
var mostVisited = function (n, rounds) {
/**
* 思路:
* 构造一个马拉松路径数组
* 从数组统计出经过次数最多的扇区
*/
let sectors = [];
let i = 1;
while (i < rounds.length) {
const start = rounds[i - 1];
const end = rounds[i];
if (start < end) {
sectors.pop();
sectors = collectSector(start, end, sectors);
}
if (start <= n && start > end) {
sectors.pop();
// 山脉升
sectors = collectSector(start, n, sectors);
// 山脉降
sectors = collectSector(1, end, sectors);
}
i++;
}
return countSector(sectors);
// 收集到扇区数组中
function collectSector(start, end, collector) {
let i = start;
while (i <= end) {
collector.push(i);
i++;
}
return collector;
}
// 统计次数
function countSector(sectors) {
const map = new Map();
let result = [];
for (const sector of sectors) {
map.set(sector, map.has(sector) ? map.get(sector) + 1 : 1);
}
let max = Infinity;
for (const [num, count] of map) {
if (max === Infinity || count >= max) {
if (count > max) {
result = [];
}
max = count;
result.push(num);
}
}
result.sort((x, y) => x - y);
return result;
}
};
// TypeScript版本
// function mostVisited(n: number, rounds: number[]): number[] {
// let sectors: number[] = [];
// let i = 1;
// while (i < rounds.length) {
// const start = rounds[i - 1];
// const end = rounds[i];
// if (start < end) {
// sectors.pop();
// sectors = collectSector(start, end, sectors);
// }
// if (start <= n && start > end) {
// sectors.pop();
// // 山脉升
// sectors = collectSector(start, n, sectors);
// // 山脉降
// sectors = collectSector(1, end, sectors);
// }
// i++;
// }
// return countSector(sectors);
// // 收集到扇区数组中
// function collectSector(start: number, end: number, collector: number[]) {
// let i = start;
// while (i <= end) {
// collector.push(i);
// i++;
// }
// return collector;
// }
// // 统计次数
// function countSector(sectors: number[]) {
// const map = new Map();
// let result: number[] = [];
// for (const sector of sectors) {
// map.set(sector, map.has(sector) ? map.get(sector) + 1 : 1);
// }
// let max = Infinity;
// for (const [num, count] of map) {
// if (max === Infinity || count >= max) {
// if (count > max) {
// result = [];
// }
// max = count;
// result.push(num);
// }
// }
// result.sort((x, y) => x - y);
// return result;
// }
// };