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

  1. public class Solution
  2. {
  3. public int LongestArithSeqLength2(int[] A)
  4. {
  5. var maxLength = ;
  6. var len = A.Count();
  7. for (var i = ; i < len; i++)
  8. {
  9. for (var j = i + ; j < len; j++)
  10. {
  11. var curmax = ;
  12. var target = A[i] - A[j];
  13. var next = A[j] - target;
  14. for (var k = j + ; k < len; k++)
  15. {
  16. if (A[k] == next)
  17. {
  18. curmax++;
  19. next = A[k] - target;
  20. }
  21.  
  22. }
  23. maxLength = Math.Max(maxLength, curmax);
  24. }
  25. }
  26. return maxLength;
  27. }
  28. }

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

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

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

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

给出一份python的实现:

  1. class Solution:
  2. def longestArithSeqLength(self, A: 'List[int]') -> int:
  3. n = len(A)
  4. if n == :
  5. return
  6. dic = {:{:}}
  7. longest =
  8. for i in range(,n):
  9. if i not in dic:
  10. dic[i] = {:}
  11. for j in range(i):
  12. diff = A[i] - A[j]
  13. if diff not in dic[j]:
  14. dic[i][diff] =
  15. else:
  16. dic[i][diff] = dic[j][diff] +
  17. longest = max(longest,dic[i][diff])
  18. 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. URL和URI(简单介绍)

    URL与URI 我们经常接触到的就是URL了,它就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? URL:uniform resource location 统一资源定位符U ...

  2. JavaScript 之 DOM

    1. DOM DOM:Document Object Model 文档对象模型,定义访问和操作结构化文档(HTML)的方式. 在 HTML DOM (Document Object Model) 中 ...

  3. CHECK约束表达式

    1.性别:只能填写'男'和'女' (字段名='男'or 字段名='女') 注意:单引号里的值可以为其他任何字 2.规定密码长度不能小于6位数 (len([字段名])>(5))   3.例:成绩在 ...

  4. Python 进程池的同步方法

    import time from multiprocessing import Process,Pool def f1(n): time.sleep(1) #print(n) return n*n i ...

  5. Linux下使用Nginx代理访问json文件报404错误

    在网上看了很多,都说是IIS的问题,关键是使用servlet就可以正常访问,使用Nginx就不行,最后发现是其他问题,解决方案如下: 1.确认配置的路径是否正确,Nginx代理的路径和你访问的路径. ...

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

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

  7. Yii2事件驱动的运行机制

    最近一段时间正在作个一个项目,这个项目会系统逻辑比较复杂,使用PHP Yii2,使用事件驱动机制进行研发,下面就最近研究事件驱动机制的使用作以下总结: 流程如下: 1.要创建含有事件注入的类,一般这样 ...

  8. fixed 相对于父容器定位

    当一个元素设置为 fixed 或 absolute,不设置 top, left 则会在原位置,而脱离文档流,别的元素可以存在于它之后. 而当使用 fixed 后还想相对于父容器进行定位,或者说在当前位 ...

  9. BSGS模板(慢速)

    //author Eterna #define Hello the_cruel_world! #pragma GCC optimize(2) #include<iostream> #inc ...

  10. PythonStudy——三元表达式 Ternary expression

    Python中的三目运算其实就是if...else...的语法糖 # 三目运算符:用于简化 if...else...的语法结构# -- 1) 只能解决if...else...结构,其他if分支结构都不 ...