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

 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. centos7.4 分区 格式化

    1. 查看磁盘 [root@yzb-centos72-3 ~]# fdisk -l Disk /dev/vda: 32.2 GB, 32212254720 bytes, 62914560 sector ...

  2. 我在MySQL免安装版使用过程中遇到的问题记录

    我的MySQL版本为:mysql-5.7.16-winx64 安装时间为:2016年5月10号 由于是免安装版,下载好压缩文件之后解压到特定目录下,再打开命令行运行几行命令即可. 在一次操作中,发现无 ...

  3. python学习之路06——字符串

    字符串 1.概念 字符串就是由若干个字符组成的有限序列 字符:字母,数字,特殊符号,中文 表示形式:采用的单引号或者双引号 注意:字符串属于不可变实体 2.创建字符串 str1 = "hel ...

  4. Flex布局-项目的属性

    Flex项目有以下6个属性: order flex-grow flex-shrink flex-basis flex align-self order属性定义项目的排列顺序.数值越小,排列越靠前,默认 ...

  5. 原来bug解决了,是这样的感觉

    终于过了,感觉好想哭啊,又莫名其妙的爽,原来这就是bug

  6. Arch Linux 独特的包管理器相关名词解释及用法对照

    https://wiki.archlinux.org/index.php/PacmanPacman包管理器是Arch Linux的主要特色之一.它结合了简单的二进制包格式和易于使用的构建系统.pacm ...

  7. python: 文件的读写

    #文件的读取.py a=open('test.txt').readline() #只读取文件第一行,保存为字符串格式 b=open('test.txt').read() #读取全部内容,保存为字符串格 ...

  8. Hyper-V 连网备忘

    最近总是把简单问题复杂化 1.内网连接: Hyper-V 上网一个内网连接足矣,宿主机与客户机可以互访,而且都可以上网.创建一个内网连接,默认配置界面如下: 然后把本地网卡共享给这个新建的内网连接,把 ...

  9. ajax 调用webservice 跨域问题

    注意两点 1. 在webservice的config中加入这段位置 (注意不是调用webservice的webconfig中加入) <system.webServer>     <! ...

  10. MySQL 和 Oracle 在 MyBatis 使用中的区别

    MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 ...