怎么思考?
怎么才能得到最多的三带一?
这是个很容易误导人的词,最多,这会使得我们思考地更加复杂。
但其实,因为题目已经限制了长度为4,所以这里我们就不需要考虑复杂的问题,因为这里只能从头挨个找,找出来的就一定是最多的三带一。
下面开始解题:
明显地,我们需要对每个长度为4的连续区间作为单个窗口进行扫描,并且检查每个窗口内是否满足三带一的要求。
如果数组长度小于4,则没有三带一,直接输出0。
否则开始区间扫描:
显然,这里可以分出两种情况:
1.如果当前窗口满足三带一,那么更新下个窗口的时候就需要向后无覆盖位移,即不得和前面的窗口有交叉,位移4步。
2.如果当前窗口不满足三带一,那么更新下个窗口的时候就需要只向后位移一步,以避免漏统计。
代码部分我使用Counter来记录每个区间内的元素出现次数,且对每个长度区间切片。
from collections import Counter
n = int(input())
nums = list(map(int,input().split()))
if n < 4:
print(0)
exit()
cnt = 0
i = 0
while i + 4 <= n:
window = nums[i:i+4]
count_dic = Counter(window)
if len(count_dic) == 2 and set(count_dic.values()) == {1,3}:
cnt+=1
i+=4
else:
i+=1
print(cnt)

京公网安备 11010502036488号