我的这个数组包含一些数字序列,如下图所示,它是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);
}
}
我将不胜感激。
答案 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
您遇到非零,继续您还要确保处理零长度序列和序列终止。
答案 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);
}
}