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 = 122 番目のサブ 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

そのようなものはうまくいくはずです:

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 に答える
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 に答える