1218. 最长定差子序列
题目地址(1218. 最长定差子序列)
https://leetcode-cn.com/problems/longest-arithmetic-subsequence-of-given-difference/
题目描述
前置知识
数组
动态规划
公司
腾讯
思路
最直观的思路是双层循环,我们暴力的枚举出以每一个元素为开始元素,以最后元素结尾的的所有情况。很明显这是所有的情况,这就是暴力法的精髓, 很明显这种解法会 TLE(超时),不过我们先来看一下代码,顺着这个思维继续思考。
暴力法
复杂度分析
时间复杂度:$O(N^2)$
空间复杂度:$O(N)$
动态规划
上面的时间复杂度是 O(n^2), 有没有办法降低到 O(n)呢?很容易想到的是空间换时间的解决方案。
我的想法是将以每一个元素结尾的最长等差子序列的长度
统统存起来,即dp[num] = maxLen
这样我们遍历到一个新的元素的时候,就去之前的存储中去找dp[num - difference]
, 如果找到了,就更新当前的dp[num] = dp[num - difference] + 1
, 否则就是不进行操作(还是默认值 1)。
这种空间换时间的做法的时间和空间复杂度都是 O(n)。
关键点解析
将
以每一个元素结尾的最长等差子序列的长度
统统存起来
代码
复杂度分析
令 n 为数组长度
时间复杂度:$O(n)$
空间复杂度:$O(n)$
相关题目
最后更新于