华为机试测试- 求有序数组中最长的等差序列
2015-09-23 16:18
453 查看
原题目是求一个无序数组中最长的等差数列。
求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:
如果没有符合条件的就输出
格式:
输入[1,3,0,5,-1,6]
输出[-1,1,3,5]
思路:
1、排序
2、d的取值范围是[0,max-min],共有max-min+1种情况
3、对每一种情况进行查找
4、对于公差d,要求最长的等差序列,需要两个循环,一个外循环从头到尾遍历,内循环从外循环的起始遍历点开始利用公式 arr[i]=arr[start]+len*d,假如符合就长度加1假如大于就跳出循环。
求随机数构成的数组中找到长度大于=3 的最长的等差数列, 输出等差数列由小到大:
如果没有符合条件的就输出
格式:
输入[1,3,0,5,-1,6]
输出[-1,1,3,5]
思路:
1、排序
2、d的取值范围是[0,max-min],共有max-min+1种情况
3、对每一种情况进行查找
4、对于公差d,要求最长的等差序列,需要两个循环,一个外循环从头到尾遍历,内循环从外循环的起始遍历点开始利用公式 arr[i]=arr[start]+len*d,假如符合就长度加1假如大于就跳出循环。
public static void getProgressArray(int[] array ,int d) { int size=array.length; int maxLenStart=0;//最大数组的开始位置 int maxLen=0;//最大长度 int startIndex=0;//起始位置 for(;startIndex<size-maxLen;startIndex++) { int pLen=1; for(int i=startIndex+1;i<size;i++) { if(array[i]==(array[startIndex]+d*pLen)) { pLen++; if(pLen>maxLen) { maxLenStart=startIndex; maxLen=pLen; } } else if(array[i]>(array[startIndex]+d*pLen)) { break; } } } int [] arr=new int[maxLen]; for(int i=0;i<maxLen;i++) { arr[i]=array[maxLenStart]+i*d; } System.out.println(Arrays.toString(arr)); }
相关文章推荐
- Unity3D之Mecanim动画系统学习笔记(七):IK(反向动力学)动画
- 解决arm92410下载程序进去出现
- NSMutableArray替换对象
- Spring中关于bean的继承
- C++序列化方法 参考google protobuf
- oracle 查询表结构
- Android应用如何支持屏幕多尺寸多分辨率问题
- css选择器指定元素中第几个子元素
- LintCode Search Range in Binary Search Tree
- Configure iSCSI Target on RHEL7
- Configure iSCSI Target on RHEL7
- MySQL问题
- leetcode 120 Triangle(难易度:Medium)
- ffmepg开发历程
- Office 2016 新特性
- 如何检查Xcode是否被植入了XcodeGhost
- Java中的关键字null
- 如何实现数组的循环移位
- 黑马程序员——Java语言基础:多态、内部类
- mycat学习日记:全局sequence