Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找给定数字数组中的最大序列_Java - Fatal编程技术网

Java 查找给定数字数组中的最大序列

Java 查找给定数字数组中的最大序列,java,Java,在给定的数字列表中查找最大序列的程序 输入=[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,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]);    

                }

        }

     }
    }   
package案例研究;
导入java.util.array;
公共类最大序列{
公共静态void main(字符串[]args){
int[]数组={1,2,3,2,4,5,6,7,8,1,0,4,5,6};
整数计数=0;
for(int i=0;i

我尝试了,但无法获得所需的输出。

如果序列被破坏,您需要将计数重置为零。下面解决方案中的逻辑是,对于每个后续的in序列号,我们将计数增加1(每个新序列的计数从1开始),并且我们将当前数字附加到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);

如果序列被破坏,您需要将计数重置为零。下面解决方案中的逻辑是,对于每个后续的in序列号,我们将计数增加1(每个新序列的计数从1开始),并且我们将当前数字附加到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);

您也可以使用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[]数组={1,2,3,2,4,5,6,7,8,1,0,4,5,6};
Arrays.stream(array.distinct()//将数组转换为流并获取不同的元素
.boxed()//获取整数流
.sorted()//对数组进行排序
.skip(Arrays.stream(array.distinct().count()-5)//最后5个元素PS。对于较大的数组不是正确的方法
.forEach(System.out::println);//打印每个元素
编辑:我误解了这个问题。您可以得到如下所示的最大序列

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();
int[]a={1,2,3,2,4,5,6,7,8,1,0,4,5,6};
StringBuilder sb=新的StringBuilder(a[0]+“”)//第一字符
整数计数=0;
for(int i=1;ia[i-1]){
计数++;
某人附加(a[i]);
}否则{
计数=0;
sb.追加(“”;//为每个序列添加标枪
}
}
String largestSeq=Arrays.stream(sb.toString().split(“”)//根据长度获取largese seq
.max(比较器.comparingit(字符串::长度))
.get();

您也可以使用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[]数组={1,2,3,2,4,5,6,7,8,1,0,4,5,6};
Arrays.stream(array.distinct()//将数组转换为流并获取不同的元素
.boxed()//获取整数流
.sorted()//对数组进行排序
.skip(Arrays.stream(array.distinct().count()-5)//最后5个元素PS。对于较大的数组不是正确的方法
.forEach(System.out::println);//打印每个元素
编辑:我误解了这个问题。您可以得到如下所示的最大序列

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();
int[]a={1,2,3,2,4,5,6,7,8,1,0,4,5,6};
StringBuilder sb=新的StringBuilder(a[0]+“”)//第一字符
整数计数=0;
for(int i=1;ia[i-1]){
计数++;
某人附加(a[i]);
}否则{
计数=0;
sb.追加(“”;//为每个序列添加标枪
}
}
String largestSeq=Arrays.stream(sb.toString().split(“”)//根据长度获取largese seq
.max(比较器.comparingit(字符串::长度))
.get();

您想要前5个最大的数字吗?因为您没有重置计数器,所以结果是错误的。每次下一个元素符合您的条件时,您只需添加
1
。但是一旦条件不再适合,你就需要重置计数器。你想要前5个最大的数字吗?你会得到一个错误的结果,因为你没有重置计数器。每次下一个元素符合您的条件时,您只需添加
1
。但一旦条件不再合适,您就需要重置计数器。您能解释一下这个答案吗?添加了注释。如果匹配长度不是5,则无法找到正确的子字符串。问题是针对前5个最大数字的。可以用n代替。不,这不是要求。要求找到任意长度的最长连续数字子序列。在调用流之前,您不知道
n
的值是多少。您能解释一下这个答案吗?添加了注释。如果匹配长度不是5,则找不到正确的子字符串。这个问题是针对前5个最大数字的。可以用n代替。不,这不是要求。要求找到任意长度的最长连续数字子序列。在调用流之前,您不知道
n
的值是多少。