配列を逆方向に調べるコードが必要です。たとえば、次のようにします[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));
}
}
次の要素がその要素に移動する間隔よりも高い場合、その値から間隔を作成して、最後の要素を選択することです。ただし、次の要素がその間隔内にある場合は、それを新しい配列に追加します。