最直接的思路是三层循环,但是会超时,代码如下:

 public class Solution
{
public int LongestArithSeqLength2(int[] A)
{
var maxLength = ;
var len = A.Count();
for (var i = ; i < len; i++)
{
for (var j = i + ; j < len; j++)
{
var curmax = ;
var target = A[i] - A[j];
var next = A[j] - target;
for (var k = j + ; k < len; k++)
{
if (A[k] == next)
{
curmax++;
next = A[k] - target;
} }
maxLength = Math.Max(maxLength, curmax);
}
}
return maxLength;
}
}

但同样的代码,使用java实现,却可以正常提交,leetcode对这道题目的的判断机制有点奇怪。

如果想解决超时问题,可以考虑使用哈希或者dp思想,来减少判断的时间。

这种题目,做起来很麻烦,看看别人的思路吧。

当时没想出来怎么做,经过一段时间的练习(两个半月),重新做这道题目,顺利做出来了,说明练习还是有效果的。

给出一份python的实现:

 class Solution:
def longestArithSeqLength(self, A: 'List[int]') -> int:
n = len(A)
if n == :
return
dic = {:{:}}
longest =
for i in range(,n):
if i not in dic:
dic[i] = {:}
for j in range(i):
diff = A[i] - A[j]
if diff not in dic[j]:
dic[i][diff] =
else:
dic[i][diff] = dic[j][diff] +
longest = max(longest,dic[i][diff])
return longest

使用hash缓存之前的记录,从三层循环减少为两层循环,时间复杂度为O(n^2),但是增加了空间复杂度。典型的用空间换时间的思想。

dic是一个字典,key值是数组的下标,value值是一个字典类型。

这个value字典,key值是int类型,表示两项之间的差;value值是int类型,表示这个差值形成的等差数列的长度。

因此每次循环用longest记录任意一个差值所形成的最长的等差数列的长度,即为所求。

leetcode1027的更多相关文章

  1. [Swift]LeetCode1027. 最长等差数列 | Longest Arithmetic Sequence

    Given an array A of integers, return the length of the longest arithmetic subsequence in A. Recall t ...

随机推荐

  1. idea中文输入法无提示问题的解决

    中文输入法无提示问题的解决 双击Shift键打开Search Everywhere,输入Switch Boot JDK,选择 Switch IDE boot JDK...菜单,然后点击...设置Ora ...

  2. OpenCV3 SVM ANN Adaboost KNN 随机森林等机器学习方法对OCR分类

    转摘自http://www.cnblogs.com/denny402/p/5032839.html opencv3中的ml类与opencv2中发生了变化,下面列举opencv3的机器学习类方法实例: ...

  3. LCA - Tarjan 算法

    void dfs(int u) { ; i <= n; i++) { if(visit[i]&&ask[u][i]) { LCA[u][i] = Find(i); } } vis ...

  4. Java第一次作业——Java语言基础

    <Java技术>第一次作业 学习总结 1.Scanner类实现基本数据输入方法 Scanner input=new Scanner(System.in); int num = input. ...

  5. Eclipse 护眼背景色设置

    链接地址:http://blog.chinaunix.net/uid-27183448-id-3509010.html 背景颜色推荐:色调:85,饱和度:123,亮度:205  文档都不再是刺眼的白底 ...

  6. CodeForces - 444C

    F - DZY Loves Colors DZY loves colors, and he enjoys painting. On a colorful day, DZY gets a colorfu ...

  7. lucas 模板 洛古模板题

    #include<bits/stdc++.h> #define int long long using namespace std; ; int a[maxn]; int quick(in ...

  8. js正则表达式讲的最好的

    https://www.cnblogs.com/chenmeng0818/p/6370819.html

  9. 使用tcpdump测试反向代理和lvs的nat区别

    关于反向代理,一个请求过来,实际反向代理服务器要和两个对象做3次握手 客户端到反向代理服务器,是一个3次握手 反向代理服务器请求后端web服务器,是一个3次握手 lvs的nat和反向代理不同. lvs ...

  10. PPTV(pplive)_forap_1084_9993.exe 木马清除经历

    ## 流氓行经 这几天电脑上突然自动安装pptv,金山毒霸清除了也不管用, 卸载了pptv过一会又自动安装上了,太嚣张了哈. ## 监控进程跟目录变化 接下来使用 ProcessMonitor 监控进 ...