import heapq
class Solution:
def findXSum(self, nums: List[int], k: int, x: int) -> List[int]:
counts = 0
answer = []
if len(nums) < x:
return [sum(nums)]
for i in range(len(nums) - k + 1):
curr_nums = nums[i: i + k]
if i == 0:
counts = Solution.count_freq(curr_nums)
prev_index = counts
else:
if 0 < i and i < len(nums) - k + 1:
prev_index[nums[i - 1]] -= 1
prev_index[nums[i + k - 1]] += 1
counts = prev_index
top_x_values = Solution.calculate_x_highest_freq(counts, x)
sum_ = 0
for j in range(len(top_x_values)):
curr = top_x_values[j]
elem = curr[0]
freq = curr[1]
sum_ += elem * freq
answer.append(sum_)
return answer
def count_freq(nums):
elem_freq = defaultdict(int)
for i in range(len(nums)):
elem_freq[nums[i]] += 1
return elem_freq
def calculate_x_highest_freq(cts, x):
items = []
for i in cts.items():
items.append((i[1], i[0]))
top_x = heapq.nlargest(x, items)
return top_x