原题

给定未排序的数组,请给出方法找到最长的等差数列。

分析

题目描述比较简单,但是有一个问题我们需要首先搞清楚:等差数列中的数字,是否要和原始数组中的顺序一致。题目中,并没有说明,这个就需要大家在面试的过程中和面试官进行交流。我们在这里对两种情况都进行讨论:

保证数字的顺序

等差数列是要求相邻两个元素之间的差是相同的。那我们可以记录下来数组中任意两个数的差,并且记录下来。对于数组A,记录A[j]-A[i],其中 i

构造hashmap如下:

-1=>(0,1)(1,2)

1=>(2,3)(4,5)

3=>(3,4)

上面已经排好序,对于第一个,找到等差数列0,1,2对应数字诶5,4,3.第二个,3和4位置没有连起来,不够成等差数列。方法平均时间复杂度为O(n^2),空间复杂度为O(n^2).

无需保证数字的顺序

不需要保证数字的顺序与原来数组一致,如何找到最长的等差数列呢?原来的数组是无序的,我们先对数组进行排序,最终的一定是排序之后序列的子序列。然后,我们采用动态规划的方法解决这个问题。

我们假设dp[i][j]表示以A[i]A[j]开始的数列的长度(数列的前两项),dp[i][j]如何表示呢?dp[i][j]=dp[j][k]+1,当 A[j]-A[i]=A[k]-A[j],及A[k]+A[i]=2*A[j]。根据dp[i][j]的定义,我们知道dp[x][n-1]=2,也就是 最后一列是2,数列只有A[x]和A[n-1]两个元素。首先,j从n-2,开始向前遍历,对于每一个,找到i和k,满足 A[k]+A[i]=2*A[j],则有dp[i][j]=dp[j][k]+1,若没有,则dp[i][j]就为2.

这里找i和k,有一个小技巧,如下:初始i=j-1,k=j+1,然后分别向两边遍历,如果A[k]+A[i]=2*A[j]则i--。大家还是参考代码吧:

最长等差数列_最长等差数列分析相关推荐

  1. 最长等差数列_最长等差子序列的长度

    问题描述 给定一个整数数组 A,返回A 中最长等差子序列的长度. 输入:[20,1,15,3,10,5,8] 输出:4 解释:最长的等差子序列是 [20,15,10,5] 问题分析 我们要找出最长的等 ...

  2. java socket发送定长报文_定长消息报文的组包与解包简单封装(Java实现)

    报文 组包 解包 在实际项目中经常会碰到不同系统之间的数据交换,有些是用webservice.有些则是使用发socket消息的方式,将需要发送的消息组装成特定格式的字符串或Xml格式的文件,再通过so ...

  3. 【Paper】2015_异构无人机群鲁棒一致性协议设计_孙长银

    原文地址:[1]孙长银,余瑶,张兰.异构无人机群鲁棒一致性协议设计[J].中国科学:技术科学,2015,45(06):573-582. 2015_异构无人机群鲁棒一致性协议设计_孙长银 4 分布式鲁棒 ...

  4. matlab xfoil计算风力,低风速长叶片风力机翼型气动分析及优化研究

    太原科技大学 机械工程学院 硕士 2018 TN83 低风速长叶片风力机翼型气动分析及优化研究 Aerodynamic Analysis and Optimization of Airfoil of ...

  5. 负载不变,响应时间随压测时间逐渐变长,TPS下降【性能分析】

    出现这种情况,主要考虑和压测机.磁盘.日志的性能瓶颈 相关推荐: 1.服务器IO高问题定位和优化 2.Mysql数据库高CPU问题定位和优化 3.应用服务器CPU高性能定位和排查 4.负载增加,TPS ...

  6. des vue 双倍长 解密_[转]单倍长密钥加密和双倍长密钥加密,银联直联终端62域难点详解...

    首先来看一段文字: ------------------– 银联直联终端测试中,在POS终端签到的应答报文中,62域是如何规定的? 62域长度应为24或40个字节.对于单倍长密钥算法:前12个字节为P ...

  7. java socket发送定长报文_一个基于TCP协议的Socket通信实例

    原标题:一个基于TCP协议的Socket通信实例 1. 前言 一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度.正好前段时间完成了一个so ...

  8. photoshop 插件_使用长阴影生成器创建长阴影[Photoshop插件]

    长阴影设计在设计师中仍然很流行. 以前,我们展示了如何在Photoshop中使用不同的图层创建自己的长阴影设计 . 当然,这很方便,但是,如果您是Photoshop的发烧友,正在寻找一种更简单的方法来 ...

  9. 应广单片机长按开关机_单片机单键开关机电路,模仿手机电源键功能 - 实现长按开机、长按关机、轻触开关锁屏...

    分享一个自己电路中的 单键开关机电路,需要与单片机的I/O配合,可实现手机电源键功能,如长按开机.长按关机.轻触开关锁屏或其他自定义功能.并且静态功耗极低,最大uA级,非常适合电池供电. 电路需求 电 ...

最新文章

  1. python快速入门答案-python快速入门基础知识
  2. 直播 | 彩云科技CEO袁行远:NLP与冒险游戏研究一览
  3. ElasticSearch,docker 安装ElasticSearch,Springboot 使用 ElasticSearch JavaAPI
  4. python中mean的用法_python 的numpy库中的mean()函数用法介绍
  5. 计算机图形学_bresenham画线算法的最简洁实现(已验证)
  6. 20165223《网络对抗技术》Exp 8 Web基础
  7. VS编译的程序设置----需要以管理员身份打开
  8. fanuc系统服务器连接,FANUC IO LINK i地址分配操作方法
  9. android tabhost的使用方法,android TabHost的基本使用
  10. ubuntu下安装MP4Box
  11. 高登数学,线性代数问题的数值解(SciPy第三方库,近似解)
  12. linux做pptpd服务,PPTPD搭建
  13. Unity自定义组件之序列帧播放组件
  14. [转]SEO做关键词的十大分析方法
  15. 牛逼,手机居然可以无线投屏到笔记本电脑!
  16. 信息系统集成考试中pv,ev,ac相关概念及运算
  17. 解决-画图程序无法读取-无效的位图文件
  18. IDL文件详解[转]
  19. 【Linux】权限-粘滞位
  20. 华为鸿蒙官网商城,再见安卓!鸿蒙版京东App上架华为商城:正式版最快6月见...

热门文章

  1. Real to Int
  2. Delphi - 被廉价甩卖的传奇
  3. 透过迷雾不再迷茫 浅析海康威视透雾技术
  4. IP大时代下,网络枪机技术发展现状
  5. C# 修改项目文件夹名称完全版
  6. 【python数字信号处理】——DFT、DTFT(频谱图、幅度图、相位图)
  7. 【Python学习】——语言风格(变量赋值、深浅拷贝、for循环陷阱)
  8. php 枚举类型比较,枚举的比较-python编程入门系列图文教程-PHP中文网教程
  9. vs2013创建及使用DLL
  10. 计算机意外重启或遇错误无法继续,计算机意外地重新启动或遇到错误如何解决?...