繁体   English   中英

在给定的数字数组中找到最大的序列

[英]Find the largest sequence in a given array of numbers

在给定的数字列表中查找最大序列的程序

输入 = [1,2,3,2,4,5,6,7,8,1,0,4,5,6] 预期结果:[4,5,6,7,8]

 package CaseStudy;
    import java.util.Arrays;



    public class LargestSequence {
        public static void main(String[] args) {

            int[] array = {1,2,3,2,4,5,6,7,8,1,0,4,5,6};
            int count=0;
            for (int i = 0; i < array.length-1; i++) {
                if (array[i+1]==(array[i])+1)
                {
                    count++;
                    System.out.print (array[i]);    

                }

        }

     }
    }   

我试过了,但无法获得所需的 output。

如果序列被破坏,您需要将计数重置为零。 以下解决方案中的逻辑是,对于每个后续的序列号,我们将计数加 1(每个新序列的计数从 1 开始),并且我们将当前数字 append 转换为 CSV 字符串,稍后打印在算法对完整的数字串运行之后。

int[] array = {1,2,3,2,4,5,6,7,8,1,0,4,5,6};
StringBuilder sb = new StringBuilder("" + array[0]);
String sequence = "";
int count = 1;
int maxCount = 1;

for (int i=1; i < array.length; i++) {
    if (array[i] == array[i-1] + 1) {
        count++;
        sb.append(",").append(array[i]);
    }
    if (array[i] != array[i-1] + 1 || i == array.length - 1) {
        if (count > maxCount) {
            maxCount = count;
            sequence = sb.toString();
        }
        count = 1;
        sb = new StringBuilder("" + array[i]);
    }
}

System.out.println("The longest sequence was " + sequence + ", with a length of: " + maxCount);

演示

这打印:

The longest sequence was 4,5,6,7,8, with a length of: 5

您也可以使用 java-stream,

int[] array = {1,2,3,2,4,5,6,7,8,1,0,4,5,6};

Arrays.stream(array).distinct(). //covert array to stream and get distinct elements
        .boxed()                 // get Integer stream Stream<Integer>
        .sorted()                // sort the array
        .skip(Arrays.stream(array).distinct().count()-5) //last 5 elements PS. not a right way for larger arrays
        .forEach(System.out::println);  // print each element

编辑:我误解了这个问题。 你可以得到最大的序列如下,

int[] a = {1,2,3,2,4,5,6,7,8,1,0,4,5,6};
StringBuilder sb = new StringBuilder(a[0]+""); //first char
int count = 0;

for (int i = 1; i < a.length; i++) {
    if (a[i] > a[i - 1]) {
        count++;
        sb.append(a[i]);
    } else {
        count = 0;
        sb.append(" ");    // add spearator for each sequesnce
    }
}
String largestSeq = Arrays.stream(sb.toString().split(" ")) //get the largese seq based on lenght
        .max(Comparator.comparingInt(String::length))
        .get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM