-
Notifications
You must be signed in to change notification settings - Fork 0
/
3d-repeated-number.js
79 lines (57 loc) · 2.25 KB
/
3d-repeated-number.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
/*
D. Повторяющееся число
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt (фактическое использование на тестах – до 130ms)
Вывод стандартный вывод или output.txt (фактическое использование на тестах – до 18.91Mb)
Вам дана последовательность измерений некоторой величины. Требуется определить, повторялась ли какое-либо число, причём расстояние между повторами не превосходило k.
Формат ввода
В первой строке задаются два числа n и k (1 ≤ n, k ≤ 10^5).
Во второй строке задаются n чисел, по модулю не превосходящих 10^9.
Формат вывода
Выведите YES, если найдется повторяющееся число и расстояние между повторами не превосходит k и NO в противном случае.
Пример 1
Ввод
4 2
1 2 3 1
Вывод
NO
Пример 2
Ввод
4 1
1 0 1 1
Вывод
YES
Пример 3
Ввод
6 2
1 2 3 1 2 3
Вывод
NO
*/
const fs = require('fs');
const input = fs.readFileSync('input.txt', 'utf8').toString().trim().split('\n');
const [total, distance] = input[0].trim().split(' ').map((value) => parseInt(value));
const values = input[1].trim() + ' ';
const length = values.length;
const indexMap = new Map();
let hasOccurrence = false;
let valueString = '';
let index = -1;
for (let pos = 0; pos < length; ++pos) {
if (values[pos] === ' ') {
++index;
const parsedNumber = parseInt(valueString);
const storedIndex = indexMap.get(parsedNumber);
if (storedIndex !== undefined && index - storedIndex <= distance) {
hasOccurrence = true;
break;
}
indexMap.set(parsedNumber, index);
valueString = '';
} else {
valueString += values[pos];
}
}
const result = hasOccurrence ? 'YES' : 'NO';
fs.writeFileSync('output.txt', `${result}`);