2013-05-08 15 views
0

我有一個包含像下面編號的一些序列,其是像素的數目的在y軸線的序列(水平投影直方圖)此數組:爪哇發現int數組的每個子序列的開始和結束

[ 0 0 3 13 16 16 18 19 19 18 14 10 8 0 0 0 0 0 7 13 15 16 19 20 18 17 14 9 0 0 0 0 ] 
    ^      ^
    start       end 

如何查找此數組中每個子序列的起始索引和結束索引?
我希望在這個例子中,將是這樣的:第一子序列:startIndex = 2, endIndex = 12秒子序列:startIndex = 18, endIndex = 27

我已經想出了:

for(int i =0; i<pixels.length; i++){ 
     System.out.println(pixels[i]); 
     if(pixels[i] != 0) { 
      start = i; 
      System.out.println("start= " + start); 
     } else if(pixels[i] == 0){ 
      end = i; 
      System.out.println("end= " + end); 
     } 
    } 

我希望得到任何幫助。

+1

你能澄清你的一個小問題? – 2013-05-08 13:15:31

+0

1)你已經描述了一個問題,以及你如何做不到,但至今沒有問過問題(更不用說具體的可回答問題了)。你的問題是什麼? 2)[你有什麼嘗試?](http://www.whathaveyoutried.com/)我的意思是*除了*問我們。 – 2013-05-08 13:16:46

+0

而.. ..是'?'在這麼多的話? – 2013-05-08 13:23:05

回答

0

迭代通過數組時,如果您已經開始序列,則不會跟蹤。

有了這個小小的改變它應該工作

int start=-1; 
for(int i =0; i<pixels.length; i++){ 
     System.out.println(pixels[i]); 
     if(pixels[i] != 0 && start == -1) { 
      start = i; 
      System.out.println("start= " + start); 
     } else if(pixels[i] == 0 && start != -1;){ 
      end = i; 
      start = -1; 
      System.out.println("end= " + end); 
     } 
    } 
0

我不想很給你答案所以這裏的一些邏輯,可以幫助

  • while您遇到0,你可以跳過它們
  • 你的第一個非零成爲開始
  • while你遇到非零,繼續阿隆摹
  • 當你遇到一個零,你到底是該指數 - 1,然後轉至步驟1

你也想確保處理零個長度序列和序列終止。

0

類似的東西應該工作:

start = -1; 
for(int i =0; i<pixels.length; i++){ 
      System.out.println(pixels[i]); 
      if(pixels[i] != 0 && start == -1) { 
       start = i; 
       System.out.println("start= " + start); 
      } else if(pixels[i] == 0 && start != -1){ 
       end = i; 
       start = -1; 
       System.out.println("end= " + end); 
      } 
     }