-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Expand file tree
/
Copy path_3016.js
More file actions
24 lines (19 loc) · 712 Bytes
/
_3016.js
File metadata and controls
24 lines (19 loc) · 712 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function minPushesToType(word) {
let freqMap = new Map();
// Using greedy frequency-based allocation (this is basically gives pirority based on frequenecy of occurence.).
// Count frequency of each letter.
for (let char of word) {
freqMap.set(char, (freqMap.get(char) || 0) + 1);
}
// Sort letters by frequency in descending order.
let frequencies = Array.from(freqMap.values()).sort((a, b) => b - a);
// Assign letters to keys 2-9.
let keys = Array(8).fill(0);
let totalPushes = 0;
for (let i = 0; i < frequencies.length; i++) {
let keyIndex = i % 8;
let presses = Math.floor(i / 8) + 1;
totalPushes += frequencies[i] * presses;
}
return totalPushes;
}