0

我有这个数组包含一些数字序列,如下所示,这是像素数的序列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);
        }
    }

我将不胜感激任何帮助。

4

3 回答 3

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);
        }
    }
于 2013-05-08T13:24:06.643 回答
0

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

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

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

于 2013-05-08T13:24:07.050 回答
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);
            }
        }
于 2013-05-08T13:27:40.153 回答