私はこのインタビューでJavaのインタビューを受けました。私は整数のリストのためのイテレータを与えられています。私は、このイテレータを引数として返す関数を書く必要があり、偶数だけのイテレータを返します。私は言われた、私は数字の元のリストを変更することはできません。したがって、リストから奇数を削除することは解決策ではありません。お知らせ下さい。ありがとう。整数のリストのイテレータを指定すると、偶数のイテレータを返す方法はありますか?
3
A
答えて
9
基本的には、既存のIteratorを使用し、hasNextメソッドと次のメソッドを上書きする新しいIteratorを作成するだけです。唯一の難点は、良好な振る舞いをするイテレータが明らかにO(1)スペースしか取らないようにする必要があるということです。新しいリストを作成し、それを使うのは悪いスタイルなので、ちょっとした簿記が必要です。以下のような何か - 無効な値などとしてではなく、やや一般的な解決のためにnullを想定し、エラー処理なしで擬似コードを簡素化 - あなたの基本的な考え方与える必要があります。
Iterator<T> it;
T next;
NewIterator(Iterator<T> it) {
this.it = it;
setNext();
}
void setNext() {
while (it.hasNext()) {
T val = it.next();
if (validT(val)) {
next = val;
return;
}
}
next = null; // lets assume null is invalid.
}
boolean hasNext() {
return next != null;
}
T next() {
T ret = next;
setNext();
return ret;
}
0
Iterator<Integer> itr;
int cur;
OddIterator(Iterator<Integer> itr) {
this.itr = itr;
cur = 0;
}
public boolean hasNext() {
if ((cur & 1) == 1) {
return true;
}
while (itr != null && itr.hasNext()) {
cur = itr.next();
if ((cur & 1) == 1) {
return true;
}
}
return false;
}
public int next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
int tmp = cur;
cur = 0;
return tmp;
}
を私はこれが役立つだろう願っています君は。私のコードにバグがある場合。私にお知らせください。
関連する問題
- 1. イテレータのイテレータの整数シーケンス(Java)
- 2. イテレータの値をローカル変数に格納する方法はありますか?
- 3. ベクトルのイテレータを返す関数
- 4. イテレータをコンテナにマップする方法はありますか?
- 5. 構造体をリストにコピーし、リストのイテレータを返すことでイテレータを作成できますか?
- 6. イテレータによる歩留まりの数を数えますか?
- 7. Rubyのループで数値イテレータを返す簡潔な方法はありますか?
- 8. コレクションにJavaのイテレータが複数あることはありますか?
- 9. ジェネレータ(イテレータ)関数の特定の歩留まりのみを返す
- 10. 複数のソート済みリストのイテレータを作成するには?
- 11. 偶数を返す方法
- 12. 整数を受け取り、n個の偶数の整数のリストを返すPythonプログラム
- 13. Pythonの反復関数でイテレータを使用する方法は?
- 14. イテレータを返すマッチアーム?
- 15. C++:セットのイテレータが指している値を返すには?
- 16. は偶数と奇数のリストを同時に繰り返します
- 17. イテレータとリスト
- 18. リストのC++イテレータ
- 19. リストのC++イテレータ
- 20. テンプレート引数の型をアサートする方法STLイテレータの型
- 21. 負のイテレータを関数に渡す方法は?
- 22. 整数の配列を偶数と奇数に分割する方法は?
- 23. std :: upper_bound constメンバー関数のconstイテレータを返します
- 24. underscoreGS関数のイテレータを使用する
- 25. ジェネレータ/イテレータのアイテム数をカウントする最短の方法は何ですか?
- 26. イテレータを指定してコンテナの比較関数を取得する
- 27. Javaの非整数指数の累乗に負の基数を計算する方法はありますか?
- 28. ブーストの開始と終了を返す方法multi_indexイテレータ
- 29. リストと二項の両方のイテレータ。
- 30. Pythonの:データ引数はイテレータ
これは基本的に正しいと思います。 'setNext'は時間が無制限です。したがって、setNext、hasNext、およびnextは同期化する必要があります。 – emory
コンストラクタが既に基本的なイテレータをスキャンし始めていることが受け入れられるかどうかはわかりません... – Kaarel
@Kaarelそれを簡単に変更できますが、それ以外の可能性のある場所は 'hasNext'呼び出しですこれはもっと悪いです – Voo