LeetCode第6293题-统计好子数组的数目-python实现-图解思路与手撕代码
一、题目描述
二、解题思路与代码实现
1.解题思路
这道题使用双指针解题。
用哈希表记录左右指针形成区间中每个元素出现的次数,用变量pair记录区间中满足题目要求的个数;
移动右指针(即遍历数组),新加进来的元素如果在哈希表中有值,就把这个值计入统计变量pair中,同时更新哈希表;
移动左指针,如果去掉最左边的元素,剩下的区间仍然满足题目要求是个好数组,就把左指针右移,同时从pair中减去除去的元素可以匹配的个数,更新哈希表。
2.代码实现
代码如下(示例):
class Solution:
def countGood(self, nums: List[int], k: int) -> int:
cnt=Counter()
left=pairs=res=0
for x in nums:
pairs+=cnt[x]
cnt[x]+=1
while pairs-(cnt[nums[left]]-1) >= k:
pairs-=(cnt[nums[left]]-1)
cnt[nums[left]]-=1
left+=1
if pairs >= k:
res+=left+1
return res
总结
这道题的重点是理解题意,使用双指针,以及python中哈希表Counter()的使用。