Skip to content

Commit 3796d2b

Browse files
committed
Time: 1092 ms (56.45%), Space: 49.4 MB (50%) - LeetHub
1 parent 894d10a commit 3796d2b

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# time complexity: O(nlogn)
2+
# space complexity: O(n)
3+
from bisect import bisect_left, bisect_right
4+
from collections import defaultdict
5+
from typing import List
6+
7+
8+
class Solution:
9+
def maxFrequency(self, nums: List[int], k: int, numOperations: int) -> int:
10+
nums.sort()
11+
result = 0
12+
numFreq = defaultdict(int)
13+
modes = set()
14+
15+
def addMode(value):
16+
modes.add(value)
17+
if value - k >= nums[0]:
18+
modes.add(value - k)
19+
if value + k <= nums[-1]:
20+
modes.add(value + k)
21+
22+
lastNumIdx = 0
23+
for i in range(len(nums)):
24+
if nums[i] != nums[lastNumIdx]:
25+
numFreq[nums[lastNumIdx]] = i - lastNumIdx
26+
result = max(result, i - lastNumIdx)
27+
addMode(nums[lastNumIdx])
28+
lastNumIdx = i
29+
30+
numFreq[nums[lastNumIdx]] = len(nums) - lastNumIdx
31+
result = max(result, len(nums) - lastNumIdx)
32+
addMode(nums[lastNumIdx])
33+
34+
for mode in sorted(modes):
35+
left = bisect_left(nums, mode - k)
36+
right = bisect_right(nums, mode + k) - 1
37+
if mode in numFreq:
38+
temp = min(right - left + 1, numFreq[mode] + numOperations)
39+
else:
40+
temp = min(right - left + 1, numOperations)
41+
result = max(result, temp)
42+
43+
return result
44+
45+
46+
nums = [1, 4, 5]
47+
k = 1
48+
numOperations = 2
49+
print(Solution().maxFrequency(nums, k, numOperations))
50+
nums = [5, 11, 20, 20]
51+
k = 5
52+
numOperations = 1
53+
print(Solution().maxFrequency(nums, k, numOperations))

0 commit comments

Comments
 (0)