算法:Sliding Window

本文作者分享了在LeetCode比赛中使用滑动窗口优化算法解决数组旋转问题的经验。滑动窗口用于在数组中寻找特定区间的高效方法,时间复杂度为O(n)。文章详细解释了如何通过滑动窗口思想改进初始的超时解决方案,最终求解Smallest Rotation with Highest Score问题。作者还反思了比赛感受,并计划挑战更复杂的题目以提升编程能力。
摘要由CSDN通过智能技术生成

上周末终于有空参加LeetCode的比赛了,而且这还是我第一次在比赛中完成所有的题目。虽然加上罚时超了比赛时间,但和以前相比也算是很大的进步。这次的题目比较简单,前两道就是暴力解法,第三道是动态规划的简单应用,最后一道比较有意思,我一开始超时了,后来发现可以用滑动窗口的思想优化。滑动窗口即Sliding Window,其实我不确定滑动窗口是不是一个算法,因为我在书上并没有看到过这个算法的介绍,但滑动窗口的思想是非常棒的,在很多题目中都能用到,接下来就以这次的最后一题为例介绍滑动窗口。

滑动窗口

滑动窗口即在数组上维护一个区间,不断调整首尾直到遍历数组。适用滑动窗口的题目往往要求找到数组中的一个区间,如果遍历数组中所有的区间,时间复杂度为O(n2),而滑动窗口的时间复杂度为O(n)。

Smallest Rotation with Highest Score

问题

给出一个数组,可以将这个数组的每一位元素往左移(越界的元素补到最右边)得到一个新的数组,长度为n的数组一共可以得到n个不同的数组。现在给每个数组打分,一个数组每一位元素的值若不大于下标则得1分,求最高分的数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值