2013-05-08 49 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); 
      } 
     }