-
Notifications
You must be signed in to change notification settings - Fork 0
/
3c-deleting-numbers.js
74 lines (56 loc) · 2.51 KB
/
3c-deleting-numbers.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
/*
C. Удаление чисел
Ограничение времени 1 секунда (фактическое использование на тестах – до 160ms)
Ограничение памяти 256Mb (фактическое использование на тестах – до 22.73Mb)
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Дан массив a из n чисел. Найдите минимальное количество чисел, после удаления которых попарная разность оставшихся чисел по модулю не будет превышать 1, то есть после удаления ни одно число не должно отличаться от какого-либо другого более чем на 1.
Формат ввода
Первая строка содержит одно целое число n (1 ≤ n ≤ 2 ⋅ 10^5) — количество элементов массива a.
Вторая строка содержит n целых чисел a[1], a[2], …, a[n] (0 ≤ a[i] ≤ 10^5) — элементы массива a.
Формат вывода
Выведите одно число — ответ на задачу.
Пример 1
Ввод
5
1 2 3 4 5
Вывод
3
Пример 2
Ввод
10
1 1 2 3 5 5 2 2 1 5
Вывод
4
*/
const fs = require('fs');
const input = fs.readFileSync('input.txt', 'utf8').toString().trim().split('\n');
const totalCount = parseInt(input[0]);
const values = input[1].trim() + ' ';
const length = values.length;
const numbersMap = new Map();
let valueString = '';
for (let pos = 0; pos < length; ++pos) {
if (values[pos] === ' ') {
const parsedNumber = parseInt(valueString);
const storedNumber = numbersMap.get(parsedNumber);
if (storedNumber) {
numbersMap.set(parsedNumber, storedNumber + 1);
} else {
numbersMap.set(parsedNumber, 1);
}
valueString = '';
} else {
valueString += values[pos];
}
}
let result = Infinity;
numbersMap.forEach((count, storedNumber) => {
const lesserNumberCount = numbersMap.get(storedNumber - 1) || 0;
const biggerNumberCount = numbersMap.get(storedNumber + 1) || 0;
const difference = Math.min(totalCount - (count + lesserNumberCount), totalCount - (count + biggerNumberCount));
if (difference < result) {
result = difference;
}
});
fs.writeFileSync('output.txt', `${result}`);