-1

配列を逆方向に調べるコードが必要です。たとえば、次のようにします[20, 15, 9, 2, 11, 9, 11, 10, 3]

要素 + - 2 によって作成された間隔内にあることを満たす要素を見つける必要があります。

元。3 は間隔 [1-5] を作成します。これは、次の要素が間隔よりも 10 大きいためです。間隔 [8-12] を作成する要素 10 に移動すると、11、9、11、9、および 10 自体がその間隔内にあることがわかり、それらを新しい配列に追加します。(要素が間隔よりも大きいとコードが壊れます。小さい要素は問題ありません)。

入力例:[20, 15, 9, 2, 11, 9, 11, 10, 3] 出力例:[9, 2, 11, 9, 11, 10, 3] or [9, 11, 9, 11, 10]

入力例:[20, 15, 9, 2, 11, 20, 11, 10, 3] 出力例:[11, 10, 3]または[11, 10]

私はこれに対して多くのアプローチを試みましたが、私はかなり新しいので、配列内で何ができるかについてあまり経験がありません。私は少し運が良かったので、インターネットを見回しました。

私がこれまでに思いついたのはこれです:

List<Integer> thetops = new ArrayList<Integer>();
double lowerFactor = 0.8;
double upperFactor = 1.2;


for(int k = tops.size()-1; k > 0; k--){
    double lowerLimit = tops.get(k) * lowerFactor;
    double upperLimit = tops.get(k) * upperFactor;

    if (tops.get(k-1) > upperLimit){
        k=k-1;

        }
    if (tops.get(k) >= lowerLimit && tops.get(k) <= upperLimit){
        thetops.add(tops.get(k));
    }
}

次の要素がその要素に移動する間隔よりも高い場合、その値から間隔を作成して、最後の要素を選択することです。ただし、次の要素がその間隔内にある場合は、それを新しい配列に追加します。

4

1 に答える 1

0

あなたが正しく理解している場合、特定のしきい値よりも高いすべての値を削除し、重複も削除したいと考えていますか?

その場合は、SortedSet(またはSortedMap) を使用して、重複を削除するすべての値をセットに追加してから、その並べ替えセットのヘッド セットを取得します。つまり、しきい値よりも小さいすべての値を取得します (しきい値が必要な場合)。同様に含まれている場合は、headSet(...)メソッドにしきい値 + 1 を渡します)。

配列のように並べ替えを保持する必要がある場合は、マップを使用して、値をキーとして使用し、配列インデックスを値として使用することをお勧めします。

于 2012-05-15T13:42:48.833 に答える