leetcode1027
最直接的思路是三层循环,但是会超时,代码如下:
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的更多相关文章
- [Swift]LeetCode1027. 最长等差数列 | Longest Arithmetic Sequence
Given an array A of integers, return the length of the longest arithmetic subsequence in A. Recall t ...
随机推荐
- 容器的注入和container设计的思想——Injection Container 理解
为什么会出现容器的注入? 容器:顾名思义,装东西的器物. 至于spring中bean,aop,ioc等一些都只是实现的方式:具体容器哪些值得我们借鉴,我个人觉得是封装的思想.将你一个独立的系统功能放到 ...
- 蓝牙协议分析(9)_BLE安全机制之LL Privacy
1. 前言 在上一篇文章[1]中,我们介绍了BLE的白名单机制,这是一种通过地址进行简单的访问控制的安全机制.同时我们也提到了,这种安全机制只防君子,不防小人,试想这样一种场景: A设备表示只信任B. ...
- scanf连续输入字符,中间不要忘记\n
#include <stdio.h> int main(void) { int precipitating; int temperature; printf("\nInput p ...
- 解决eclipse高版本JDK编译的项目到低版本JDK服务器上不能运行的问题
错误提示信息:Unsupported major.minor version 52.0,意思是说,当前jdk的版本不支持更高版本jdk编译出来的class文件. 我的编译环境,eclipse使用的是j ...
- Linux源码安装软件
Linux环境下 源码编译安装软件 ==== 1. 下载,步骤略 ==== 2. 验证,部分官方下载同时提供签名,MD5,sha1,sha256等校验信息. $ gpg --verify gnupg- ...
- html框架以及属性字体应用
今日java开课,下午老师讲解了java的第一节课,有关于html的框架,为了自己方便以后也会在日记中添加一些便签方便自己使用. 了解这一些之后老师发布的作业也让我对码代码有了更深的认知,码完作业之后 ...
- #考研笔记#计算机之word问题
Word 问题:1. 如何为文档加密保存?单击 office 按钮\另存为\工具按钮\常规选项\设置打开文件时的密码 2. 怎样在横格稿纸中录入古诗?单击 office 按钮\新建\模板\信纸\稿纸( ...
- linux服务器架设--学习笔记
PS: Centos是属于红帽子的操作系统
- edgedb 强大的对象关系数据库
edgedb 是一个强大的对象关系数据库,构建在pg 之上. 包含的特性: 严格的强类型模式; 强大而富有表现力的查询语言; 丰富的标准库; 内置支持模式迁移; 本机GraphQL支持. 数据模型 从 ...
- node 下less无法编译的问题
vue+less的项目中,npm run dev不通过,提示以下错误: These dependencies were not found: * !!vue-style-loader!css-load ...