n个整数中,找出尽可能多的数使他们组成一个等差数列,求最长等差数列的长度
例子: 3,8,4,5,6,2 返回值应该为 :5
这是昨天做的一道优酷土豆的编程题,和leetcode中的128/ Longest Consecutive Sequence 有点相似,但是leetcode题的公差是确定的1,而这道题的公差是不确定的。
本人的写出的是一种通过穷举的方法实现查找最长等差数列,通过hash使查找更为方便,减少了复杂度。
int calcAPLength(const vector<int> &intAr) // 找数列中,最长的等差数列的长度 ,返回该数列的长度
{
if (intAr.size() <= ) return intAr.size();
vector<int> t = intAr;
sort(t.begin(),t.end());
auto p=unique(t.begin(),t.end());
int l = p - t.begin(); // 经过排序和unique后数组的长度 注意:unqiue并没有将重复的元素删除,而是放在了数组的后面 map<int, int>my; int test = ; // hash ,并初始化
for (int i = ; i < l; i++,test++)
my[t[i]] = test; int re = ;
int diff;
for (int i = ; i < l; i++) // 遍历数组,
{
for (int j = ; j < l; j++) // 公差: 与第j个元素的差
{
int index = j + i; if (index >= l) break;
diff = t[index]-t[i];
int temp = ;
while (my[diff + t[index]] <= l && my[diff + t[index]]> ) //查找下一个元素是否存在
{
index = my.find(diff + t[index])->second-;
temp++;
}
re = max(re, temp);
}
}
return re;
}
注意:unqiue并没有将重复的元素删除,原来数组的长度也并没有改变,而是把重复的元素放在了数组的后面。
希望有人能提出更好的方法!
n个整数中,找出尽可能多的数使他们组成一个等差数列,求最长等差数列的长度的更多相关文章
- 刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数
今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的 ...
- 海量数据处理 - 10亿个数中找出最大的10000个数(top K问题)
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些. 先拿10000个数建堆, ...
- 海量数据中找出前k大数(topk问题)
海量数据中找出前k大数(topk问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小 ...
- 10G个64bit整数,找出中位数
[10G个64bit整数,找出中位数] 题目:在一个文件中有10G个64bit整数,乱序排列,要求找出中位数.内存限制为2G. 解法:内存限制为2G表面上是限制,实际上是一种提示,在提示我们如何利用2 ...
- python3实现在二叉树中找出和为某一值的所有路径
在二叉树中找出和为某一值的所有路径请写一个程序创建一棵二叉树,并按照一定规则,输出二叉树根节点到叶子节点的路径.规则如下:1.从最顶端的根结点,到最下面的叶子节点,计算路径通过的所有节点的和,如果与设 ...
- ytu 1061: 从三个数中找出最大的数(水题,模板函数练习 + 宏定义练习)
1061: 从三个数中找出最大的数 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 124[Submit][Status][We ...
- hdu 1595 find the longest of the shortest【最短路枚举删边求删除每条边后的最短路,并从这些最短路中找出最长的那条】
find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 如何在 Linux 中找出最近或今天被修改的文件
1. 使用 ls 命令,只列出你的 home 文件夹中今天的文件. ls -al --time-style=+%D | grep `date +%D` 其中: -a- 列出所有文件,包括隐藏文件 -l ...
- N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法,且要求K<=15*N.
N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列.设计加密解密算法,且要求K<=15*N. ...
随机推荐
- Hibernate的缓存技术详解
转载注明出处:http://www.cnblogs.com/xiaoming0601/p/5882980.html 一.什么是缓存: 并不是指计算机的内存或者CPU的一二级缓存:缓存是指为了降低应用程 ...
- PHP学习笔记:MySQL数据库的操纵
Update语句 Update 表名 set 字段1=值1, 字段2=值2 where 条件 练习: 把用户名带 ‘小’的人的密码设置为123456@ 语句:UPDATE crm_user SE ...
- CSS应用内容补充及小实例
一.clear 清除浮动 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- c++之函数重载(函数匹配)
Case void f(); void f(int); void f(int, int); void f(double, double = 3.14); 匹配原则: 1)其形参数量与本次调用提供的实参 ...
- JQuery插件validate的Remote使用
JQuery.validate.js 在表单验证中经常使用,初学,对于其中Remote的使用说明一下. 1. 基本解释 JQuery主要用于DOM树和CSS树的检索和后面的操作的一套方法,JQuery ...
- 【读书笔记】iOS-NSDate
+dateWithTimeIntervalSinceNow:接受一个NSTimeInterval参数,该参数是一个双精度值,表示以秒为单位的时间间隔.通过该参数可以指定时间偏移的方式:对于将来的时间, ...
- ReactiveCocoa中信号的使用
前言: 很早之前就有看过ReactiveCocoa,那会看的时候知道是一个新的框架关于响应式编程,具体什么也没有深入研究,今天也对ReactiveCocoa这个框架的使用进行了一定的了解.在githu ...
- paas架构之docker——镜像管理
1. 镜像管理 1.1. 列出镜像 Sudo docker images 1.2. 查看镜像 Sudo docker images xxxx 1.3. 拉取镜像 Sudo docker pull ub ...
- JJ Ying:越来越跨界的界面设计
2013年6月29号 星期六 小雨 @大众点评 利用非界面设计的专业知识来提升界面设计 向平面设计跨界 向工业设计的跨界 向摄影跨界 向动向的的跨界 向程序跨界 讲师介绍: JJ Ying / ...
- java Hello 出现以下结果:Bad command or the file name 可能是什么原因
没有这个命令或文件名 原因可能是没有成功安装jdk或者没有配置好jdk 的环境变量,或者没有编译相应的文件. 2. 出现以下结果:Exception in thread “main” java.lan ...