zoukankan      html  css  js  c++  java
  • 华为机试测试- 求有序数组中最长的等差序列

    原题目是求一个无序数组中最长的等差数列。
    求随机数构成的数组中找到长度大于=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));
        }
  • 相关阅读:
    Linux/UNIX编程:实现简单 tee 命令
    Java原子变量类需要注意的问题
    一种很有意思的数据结构:Bitmap
    Java实现简单井字棋
    分治算法学习
    使用栈实现表达式求值
    Web安全学习笔记——SQL注入
    【old】Python学习笔记
    函数1
    pycharm(Tip of Day)
  • 原文地址:https://www.cnblogs.com/maydow/p/4832617.html
Copyright © 2011-2022 走看看