2014-02-27 43 views
-1

我想知道实现此目的的最佳方法是什么。数组列表和查找具有相同编号的最长子序列

想不出一个好办法救什么是需要保存像 索引和值的数量,最后是那些获得的重复

public class testing 
{ 

public static void main(String[] args) 
{ 
    ArrayList<Integer> numbers = new ArrayList<Integer>(); 
    Scanner in = new Scanner(System.in); 
    Integer a =0; 
    Integer value = 0; 
    Integer num = 0; 

    boolean loop = true; 
    //getting the string information 
    while(loop) 

    { 
     System.out.println("Enter a series of numbers, 0 to stop"); 
     Integer n = in.nextInt(); 
     if(n.equals(0)) 
     { 
      break; 
     } 
     else 
     { 
      numbers.add(n);   

     } 



    } 

    for (int i = 1; i < numbers.size(); i++) 
    { 




    } 

} 



} 
+5

你最好确保你展示你的工作。根据Stack Overflow策略,我们现在无法回答这个问题。 –

回答

0

你可以使用一个2D的实际数目的信息ArrayList中,声明如下:

ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); 

然后声明2周的ArrayList在该过程结束时添加到它:

ArrayList<Integer> length = new ArrayList<Integer>(); 

ArrayList<Integer> value = new ArrayList<Integer>(); 

然后

1)遍历列表检查元素是否与先前相同。

如果是,继续进行下去直到结束或发现一个不同的元素,此时将ArrayList中前一个等于元素的数量称为'length',并将该元素的值存储在名为'value ”。有一个int(称为index say),它存储包含最长当前子序列长度的元素索引(它将与包含它所组成元素值的元素的索引相同)被存储在值中))。

如果不是,移动到下一个元素。

2)重复该过程,必要时更新索引(即如果发现更长的子序列)。

要增加长度和值导致底,只是做result.add(length);result.add(value);

如果你想在一个整数返回一个对象,它拥有所有必要的信息,你可以换整型“索引”和将其添加到名为'length'的ArrayList的末尾,或者将其添加到新的ArrayList中并添加该ArrayList以生成结果。

注意,在指数我在第一ArrayList中检索元素(在这种情况下,一个名为“长度”)已存储在结果后,你需要做的

result.get(0).get(i); 

编辑:

所以for循环一部分,我脑子里想的是这样的:

boolean same = false; 
int sequenceLength = 0; 
Integer sequenceInteger = null; 

for (int i = 1; i < numbers.size(); i++) 
     { 
      if(numbers.get(i).equals(numbers.get(i-1))) 
       { 
         same = true; 
         sequenceLength++; 
       }  
      else(if same == true) 
       { 
         sequenceInteger = new Integer(sequenceLength); 
         //add sequenceInteger to length and numbers.get(i-1) to value 
         same = false; 
         sequenceLength = 0; 
       } 
      // else do nothing since same is false, which means that the current 
      // element is different from the previous and the previous is 
      // different the one before that, so there are no new values to store 
     } 
// end of list reached 
(if same == true) 
{ 
     sequenceInteger = new Integer(sequenceLength); 
     //add sequenceInteger to length and numbers.get(i-1) to value 
     same = false; 
} 
+0

我会保持数字的初始数组? 而2d数组用于存储其他2个数组的长度和值? 并开始比较,我将不得不做一些像Integer a = numbers.get [i];然后如果a = numbers.get [i + 1],然后将它添加到列表中? – user3307265

+0

感谢您的帮助 – user3307265

+0

是的问题1和2(除了它们是ArrayLists,而不是数组)。不,因为我)测试与整数平等我认为你需要做的如果(numbers.get(i).compareTo(numbers.get(i-1))== 0),和ii)你如果与下一个数字相等(如第三个问题所示),不添加数字。如果它与前一个相同,你甚至不会添加它。如果您在到达第一个元素后立即找到至少2个相等的后续元素的列表,那么您将添加该元素,此列表后面的相同元素不同,或者您到达列表的末尾。 –

相关问题