如何计算时间复杂度
我们来看一道题目:
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
示例:
输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。
暴力破解
这道题目暴力解法当然是 两个 for 循环,然后不断的寻找符合条件的子序列,时间复杂度很明显是$O(n^2)$。
代码如下:
|
滑动窗口
接下来就开始介绍数组操作中另一个重要的方法:滑动窗口。
所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
|
时间复杂度:$O(n)$ 空间复杂度:$O(1)$
为什么时间复杂度是$O(n)$。
不要以为 for 里放一个 while 就以为是$O(n^2)$啊, 主要是看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被被操作两次,所以时间复杂度是 2 × n 也就是$O(n)$。
而暴力破解,最坏的情况,最后一个元素每个循环都要被用到,所以是 $O(n^2)$
- 本文作者: luckyship
- 本文链接: https://luckyship.github.io/2022/03/13/2022-03-13-time-complexity/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!