1. 解题思路
这一题是leetcode双周赛171的第四题,是一个hard的题目。
这一题思路上就是一个滑动窗口的题目,我们只需要考察长度为 k k k的连续窗口中加入一个元素与减去一个元素的状态即可。
加入最右的一个元素,会带来的反序列的个数就是窗口中所有大于该元素的数的个数,反之,减去最左的一个元素,其减少的反序列的个数就是窗口中所有小于该数的元素的个数。
2. 代码实现
给出python代码实现如下:
class Solution:
def minInversionCount(self, nums: List[int], k: int) -> int:
n = len(nums)
ans = math.inf
cnt = 0
window = []
for i, num in enumerate(nums):
if i-k >= 0:
idx = bisect.bisect_left(window, nums[i-k])
cnt -= idx
window.pop(idx)
idx = bisect.bisect_right(window, num)
cnt += len(window) - idx
window.insert(idx, num)
if i >= k-1:
ans = min(ans, cnt)
return ans
提交代码评测得到:耗时5257ms,占用内存32.28MB。
4209

被折叠的 条评论
为什么被折叠?



