例如, 鉴于[100,4,2,1,3,2], 最长的连续元素序列是[1,2,3,4]。
public class Array {
public static void main(String args[]){
int a[]={10,15,1,2,3,4,5,11,12};
int b=1;
int c=0;
for(int i=0;i<a.length-1;i++){
if(a[i]-a[i+1]==-1){
b=b+1;
c=c+1;
if(b>=c)
{
System.out.println(a[i]);
}
else{
b=0;
}
}
}
}
}
但我的输出为1 2 3 4 11 而输出应为1 2 3 4 5。
如何获得所需的输出,是什么代码中的错误?
答案 0 :(得分:2)
你可以尝试一下:
int[] array = {10,15,1,2,3,4,5,11,12};
List<Integer> tempList = new ArrayList<>(); // prepare temp list for later use
List<List<Integer>> arrays = new ArrayList<>(); // used to store the sequences
int lastNum = array[0]; // get the fist number for compasion in loop
tempList.add(lastNum);
for (int i = 1; i < array.length; i++) {
if (array[i]-1 == lastNum) { // check for sequence (e.g fist num was 12,
// current number is 13, so 13-1 = 12,
// so it has the sequence), then store the number
tempList.add(array[i]); // store it to the temp list
lastNum = array[i]; // keep current number for the next
} else { // if it has not the sequence, start the new sequence
arrays.add(tempList); // fist store the last sequence
tempList = new ArrayList() // clear for the next sequence
lastNum = array[i]; // init the lastNumnber
tempList.add(lastNum);
}
}
// now iterate for the longest array
// craete an empty array to store the longest
List<Integer> longestLength = new ArrayList<>();
for (List<Integer> arr : arrays) {
if (arr.size() > longestLength.size()) {
// check if the current array hase the longest size than the last one
// if yes, update the last one
longestLength = arr;
}
}
// at the end print the result.
System.out.println("longestLength = " + longestLength);
结果:
longestLength = [1, 2, 3, 4, 5]
答案 1 :(得分:1)
试试此代码
public class Array {
public static void main(String args[]){
int a[]={10,15,1,2,3,4,5,11,12};
int ms=0; // starting point of max subseq
int me=0; //ending point of max subseq
int cs=0,ce=0; //starting and ending point of current subseq
int max=0,c=0; // length of max and current subseq
for(int i=0;i<a.length-1;i++){
if(a[i]-a[i+1]==-1){
if(c==0) //we found the first element of a subseq
{
cs=i;ce=i+1;c=2; //made the starting of currrent seq=i, end=i+1 and length=2
}
else // element is a part of subsequence but not first elem
{
ce=i+1;c++; // increased current ending point
}
if(c>max) // if lenth of current subseq is now largest then update staring and ending points of max
{
max=c;
ms=cs;
me=ce;
}
}
else // subseq ended
{
cs=0;
ce=0;
c=0;
}
}
for(i=ms;i<=me;i++) //printing max subsequence
System.out.println(a[i]);
}
}
注意:请参阅说明评论
答案 2 :(得分:0)
如果首先对数组进行排序,则代码应该可以正常工作。你试过了吗?
答案 3 :(得分:0)
componentWillUnmount() {
window.removeEventListener("resize", this.updateDimensions.bind(this));
}
然后
import java.util.*;
Arrays.sort(a);
答案 4 :(得分:0)
class Test
{
public static void main (String[] args) throws java.lang.Exception
{
int a[]={10,15,1,2,3,4,5,11,12};
Arrays.sort(a);
ArrayList<Integer>output = new ArrayList<Integer>();
ArrayList<Integer>temp = new ArrayList<Integer>();
for(int i =1; i<a.length; i++){
//If elements have difference of one, add them to temp Arraylist
if(a[i-1] + 1 == a[i]){
temp.add(a[i-1]);
}
else{
//Add the last consecutive element
temp.add(a[i-1]);
//If temp is lager then output
if(temp.size() > output.size()){
output = (ArrayList<Integer>) temp.clone();
temp.clear();
}
}
}
//Outside for loop, making sure the output is the longer list. This is to handle the case where the consecutive sequence is towards the end of the array
if(temp.size() > output.size()){
output = (ArrayList<Integer>) temp.clone();System.out.println("after clone outside for " + output.toString());
}
System.out.println(output.toString());
}
}