华为机试测试- 求有序数组中最长的等差序列

原题目是求一个无序数组中最长的等差数列。

求随机数构成的数组中找到长度大于=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));
    }
时间: 2024-10-16 05:44:09

华为机试测试- 求有序数组中最长的等差序列的相关文章

华为机试测试- 字符串最长的数字串

输入 输入一个字符串. 输出 输出字符串中最长的数字字符串和它的长度. 如果数字字符串为空,则只输出0 如 input: dadfsaf  output:0 样例输入 abcd12345ed125ss123058789 样例输出 123058789,9 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { p

华为机试测试-dna-字符串

一个DNA序列由A/C/G/T四个字母的排列组合组成.G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度).在基因工程中,这个比例非常重要.因为高的GC-Ratio可能是基因的起始点. 给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列. 输入 输入一个string型基因序列,和int型子串的长度 输出 找出GC比例最高的字串 样例输入 AACTGTGCACGACCTGA 5 样例输

求有序数组中不重复数字的出现次数

不使用jdk的集合类,通过遍历数组得到,因为数组是有序的,在遍历数组的时候,统计整数是否重复出现,如果没有重复出现计数加一,若重复出现则是计数减一. java解决方法,时间复杂度O(n). public int countNoRepeatNum(int[] arr, int n) { if(arr == null || n <= 0) return -1; boolean repeat = false; int count = 1; int num = arr[0]; for(int i=1;i

华为机试测试- 最小公倍数

import java.util.*; /*求最大公约数和最小公倍数*/ public class MaxCommonDivisorAndMinCommonMultiple { public static void main(String[] args) { Scanner scan = new Scanner(System.in);// 接收控制台输入的信息 System.out.print("请输入第一个整数:"); int num1 = scan.nextInt(); // 取出

华为机试:求最小公倍数

题目描述 正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数. 输入描述: 输入两个正整数A和B. 输出描述: 输出A和B的最小公倍数. 示例1 输入 5 7 输出 35 最小公倍数*最大公约数=两数之积: 最大公约数求法: Java:抄别人的 1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Main { 5 6 public static v

华为机试测试- 大数相加

方法一: 直接使用BigDecimal 方法二:字符串解析,注意stringBuilder.append(int x)这里的x最终会变成x字符串,而不是对应的char. 1 import java.math.BigDecimal; 2 import java.util.Scanner; 3 4 5 public class Main { 6 public static void main(String[] args) { 7 Scanner scanner=new Scanner(System.

华为机试测试-

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 1 import java.util.Scanner; 2 3 4 public class Main { 5 public static void main(String[] args) { 6 Scanner scanner=new Scanner(System.in); 7 int n=scanner.nextInt(); 8 S

华为机试测试-矩阵乘法-循环

1 import java.util.Scanner; 2 public class Main{ 3 public static void main(String[] args){ 4 Scanner scanner=new Scanner(System.in); 5 int row=scanner.nextInt(); 6 int len=scanner.nextInt(); 7 int column=scanner.nextInt(); 8 int [][] x1=new int[row][

华为机试测试- 质数因子

根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积. import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); Lo