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

 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. Alpha冲刺5

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/9989898.html 作业博客:https://edu.cnblogs.com/campus/ ...

  2. [Spring Boot]什么是Spring Boot

    <Spring Boot是什么> Spring Boot不是一个框架 是一种用来轻松创建具有最小或零配置的独立应用程序的方式 用来开发基于Spring的应用,但只需非常少的配置. 它提供了 ...

  3. Android:进程优先级

    进程优先级 优先级 服务 说明 高优先级 前台进程 ①该进程包含正在与用户进行交互的界面组件,比如一个Activity. ②进程服务被Activity调用,而且这个Activity正在与用户进行交互 ...

  4. 在myeclipse中maven项目关于ssh整合时通过pom.xml导入依赖是pom.xml头部会报错

    错误如下 ArtifactTransferException: Failure to transfer org.springframework:spring-jdbc:jar:3.0.5.RELEAS ...

  5. 搭建数据驱动框架第一步-实现一个构造函数,将对Excel文件的基本操作API都封装进去

    Python处理Excel常用操作就是读和写,我的需求是需要在原excel文件中进行读写操作.共用到了两个模块xlrd和openpyxl,这两个模块都是需要自己去安装的.openpyxl只能用来处理 ...

  6. Linux安装软件出现 “Unable to locate package xxx”错误

    使用新购入的阿里云服务器ECS,预装的Ubuntu,然后想要利用 xrdp 进行远程登陆,但是在输入命令: apt-get install xrdp 出现了 E;Unable to locate pa ...

  7. LINUX文件删除,但磁盘空间未释放

    最近在进行系统压测,由于服务器节点太多,便写了个简单的脚本,在执行过程中发现,日志文件删除后,磁盘空间只释放了一小部分,任有大部分磁盘空间未释放. 使用lsof | grep delete命令,发现已 ...

  8. ubuntu下安装mysql和配置远程访问

    ubuntu下安装mysql和配置远程访问   下载安装mysql sudo apt-get install mysql-client mysql-server 安装的时候会提示要设置root密码,如 ...

  9. BBS项目详解(forms快速创建登陆页面,登陆验证、通过阅读器进行头像上传的预览、内存管理器)

    BBS项目涉及的知识点 django中知识点 钩子函数(局部钩子和全局钩子) 1.局部钩子就是用来做合法性校验,比如用户名有没有被使用等 2.全局的就是用来做对比校验,比如两次输入的密码是否一致 3. ...

  10. (32)forms组件(数据校验)

    forms组件的用处 1.就是用来做数据校验的 2.渲染页面 3.渲染错误信息(和局部刷新同效果) 数据校验 要使用forms组件必须要写一个类继承forms组件 urls.py from bbs01 ...