[英]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.