Skip to content

Commit a6ea585

Browse files
committed
2968. Apply Operations to Maximize Frequency Score
1 parent 09214df commit a6ea585

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
3+
// Solution by Sergey Leschev
4+
// 2968. Apply Operations to Maximize Frequency Score
5+
6+
func maxFrequencyScore(_ nums: [Int], _ k: Int) -> Int {
7+
var sortedNums = nums.sorted()
8+
let n = nums.count
9+
var prefixSum = [Int](repeating: 0, count: n + 1)
10+
11+
for i in 0..<n {
12+
prefixSum[i + 1] = prefixSum[i] + sortedNums[i]
13+
}
14+
15+
var start = 0
16+
var end = 1
17+
var maxScore = 1
18+
19+
while end < n {
20+
end += 1
21+
let mid = (start + end) / 2
22+
let target = sortedNums[mid]
23+
var cost =
24+
target * (mid - start) - (prefixSum[mid] - prefixSum[start])
25+
+ (prefixSum[end] - prefixSum[mid] - target * (end - mid))
26+
27+
while start < end && cost > k {
28+
start += 1
29+
let mid = (start + end) / 2
30+
let target = sortedNums[mid]
31+
cost =
32+
target * (mid - start) - (prefixSum[mid] - prefixSum[start])
33+
+ (prefixSum[end] - prefixSum[mid] - target * (end - mid))
34+
}
35+
36+
maxScore = max(maxScore, end - start)
37+
}
38+
39+
return maxScore
40+
}
41+
}

0 commit comments

Comments
 (0)