2014-02-27 40 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個相等的後續元素的列表,那麼您將添加該元素,此列表後面的相同元素不同,或者您到達列表的末尾。 –

相關問題