leetcode刷题笔记-滑动窗口

乍一看觉得这个题思路很明显,滑动窗口可以解答,但是忘了咋写,就用笨办法讨论着做:

class Solution(object):
    def beautifulBouquet(self, flowers, cnt):
        """
        :type flowers: List[int]
        :type cnt: int
        :rtype: int
        """
        dict_comb = {}
        for i in range(1, len(flowers)+1):
            if i <= cnt:
                dict_comb[i] = dict_comb.get(i, len(flowers)+1-i)
                # print("i = {}  res = {}".format(i, dict_comb[i]))
            else:
                tmp = 0
                for j in range(0, len(flowers)):
                    list_tmp = flowers[j:j+i]
                    if len(list_tmp) != i:
                        break
                    else:
                        # print("i= {} j={} list_tmp:{}".format(i,j, list_tmp))
                        count = list(Counter(list_tmp).values())
                        # print("List={}".format(Counter(list_tmp)))
                        # print("count={}".format(count))
                        if max(count) <= cnt:
                            tmp+=1
                dict_comb[i] = dict_comb.get(i, tmp)
                # print("i = {}  res = {}".format(i, dict_comb[i]))


        return sum(dict_comb.values())% 1000000007

超时了。还是得看看滑动窗口/双指针怎么做。

窗口滑动的过程就是窗口数据在某段数据上按照某个步长遍历对照的过程
滑动窗口算法三个要素: 窗口长度,滑动长度,滑动步长

https://blog.csdn.net/qq_55433334/article/details/127179881
双指针主要参考了大佬的B站视频,很详细

双指针

这样一个缩小区间的观点很有用!

补充一些双指针的知识:

双指针(Two Pointers):指的是在遍历元素的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问,从而达到相应的目的。
双指针分为「对撞指针」、「快慢指针」、「分离双指针」。
对撞指针:两个指针方向相反。适合解决查找有序数组中满足某些约束条件的一组元素问题、字符串反转问题。
快慢指针:两个指针方向相同。适合解决数组中的移动、删除元素问题,或者链表中的判断是否有环、长度问题。
分离双指针:两个指针分别属于不同的数组 / 链表。适合解决有序数组合并,求交集、并集问题。
————————————————
版权声明:本文为CSDN博主「拾忆&amp;长安」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接: https://blog.csdn.net/qq_61707205/article/details/124780860

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值