算法题到底咋做很多题根本找不到思路,每个题做完弄懂之后,下一次还是重写不出来,不知道啥算懂
利益相关。力扣君这里有一些算法题刷题技巧,一起来看看吧!
众所周知,算法题主要有两大难点,一是「实现」,即算法本身的难度;二是「思路」,即你能否想到使用这个算法来解决题目。
并且对于有一定刷题基础的同学来说,力扣(LeetCode)上大部分简单、中等题所涉及的算法都是非常常见的算法,即算法本身不存在难度,最大的难点在于「思路」,即如何想到适合本题的算法。
而解决「思路」问题,除了大量刷题积累经验之外,还可以采用一定的「巧劲」,从时间复杂度这个角度入手筛选出合适的算法。而本文的主要目的就是向大家介绍这种「巧劲」是如何在具体解题过程中发挥作用的。
本文一共分成三个部分,具体内容框架如下所示:
一、数据范围的隐含信息如何确定一道题合适的时间复杂度?最简单、快捷的方式就是通过观察题目中的数据范围来确定。
不过你可能马上会反驳,力扣上并不是所有题目都有数据范围,那又该如何确定呢?
不要急噢,没有数据范围也是可以采用这种方式来思考的,我们会在「练习」部分进行详细说明。
言归正传,如何通过数据范围来确定合适的时间复杂度呢?
通常来说,在力扣上,Python 可以支持到
的时间复杂度;C++ 会稍微多一点,大概
-
之间。因此我们可以得到如下表所示的,数据范围与算法大致时间复杂度的对应表。
二、算法时间复杂度总结 通过数据范围得到时间复杂度后,我们需要对照下图筛选出适合的算法进行求解。
此处有两点需要注意:
1. 上图仅列出了时间复杂度较为固定的常见算法,而类似于动态规划、贪心、暴力等时间复杂度百变多样的算法并未列出。
2.
的算法通常与
的算法组合在一起,用于实现
要求的题目。
三、练习?在讲解具体题目之前,我们先明确一下根据时间复杂度做题的具体流程:
1. 根据数据范围选择时间复杂度
2. 根据时间复杂度选择对应的常见算法集合
3. 思考题目特征,从集合中选出合适的算法
4. 根据选出的算法求解题目
接下来我们从力扣「2020-04月 每日一题」中选取三道题用于该流程的练习。
题库 - 力扣 (LeetCode)
力扣 1248. 统计「优美子数组」力扣题目描述给你一个整数数组 nums 和一个整数 k。
如果某个连续子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。
请返回这个数组中「优美子数组」的数目。
示例 1:输入:nums = , k = 3输出:2解释:包含 3 个奇数的子数组是 和 。示例 2:输入:nums = , k = 1输出:0解释:数列中不包含任何奇数,所以不存在优美子数组。示例 3:输入:nums = , k = 2输出:16
推荐阅读
- 联运■连云港港全国首推集装箱铁水联运“一单到底”
- 汽车知识|第八代高尔夫到底值不值得买?1.4T自动Pro版全款多少钱?
- 人潮汹涌|丁真爆火第20天,到底谁才是真正的“幕后推手”?华春莹为他连发三推
- 微博目前已经支持文本,图片,位置分享,为啥没有语音和视频呢微博的pm肯定想过这两种微博形态,但迟迟不做的原因到底是啥。是语音和视频不符合产
- 什么|到底是什么原因?宝宝易咳嗽
- 淘宝店卖杯子咋推广咋做9.9包邮的爆款有作用吗
- 京广和公司到底是干啥的
- 董洁|40岁的董洁到底怎么啦?少女造型被吐槽,女性的温柔感也不见了
- 中兴努比亚 Z5 的边框到底有多窄
- 汽车知识|西装暴徒的代表,40w就能拥有百万级别的声浪,到底是什么车
