Java查找int数组中每个子序列的开始和结束

时间:2013-05-08 13:13:30

标签: java arrays

我的这个数组包含一些数字序列,如下图所示,它是y轴(水平投影直方图)中像素数的序列:

[ 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);
        }
    }

我将不胜感激。

3 个答案:

答案 0 :(得分: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);
        }
    }

答案 1 :(得分:0)

我不想给你答案,所以这里有一些可能有帮助的逻辑

  • while你遇到0,你可以跳过它们
  • 你的第一个非零成为开始
  • while您遇到非零,继续
  • 当您遇到零时,您的结束是索引 - 1.然后转到步骤1

您还要确保处理零长度序列和序列终止。

答案 2 :(得分: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);
            }
        }