0

私はこのクラスを持っています

class TimeSpentStats{
  int manId;
  String sessionId;
  int userId;
  Long timeStamp;
}

リストがあり、それぞれのリストから最小タイムスタンプと最大値を取得したい (manId、sessionId、userId)

たとえば、私は持っています:

manId sessionId userId タイムスタンプ

1      01F      5          1000
1      01F      5          1005
3      6Y       3           7
3      6Y       3           16

(1 01F 5) -> 最小 = 1000 、最大 = 1005 および (3 6Y 3 ) -> 最小 = 7 、最大 = 16 が必要です

同じクラスにおそらく 2 つの属性を追加する必要がありますか? 私がこれを行うことができれば、何かアイデアはありますか? ありがとうございました

4

3 に答える 3

0

トリプルの要素が独立している場合、これは何よりも組み合わせ論の問題です。すべてのトリプルを見つける必要があります。これは非常によく説明された問題であり、Java で処理できる再帰的な解決策がありますが、もちろん、問題が大きくなった場合はスタックを監視する必要があります。トリプルの要素が依存している場合、生活は楽になります。いずれにせよ、ブルート フォース アプローチは明らかです。比較可能な項目を反復処理し、項目を最大値と比較し、項目を最小値と比較します。最大値と最小値を記録します。これらがオブジェクト内にある場合は、ネストされた HashMap を作成できます。たとえば、manIds を (セッション ID のマップから (ユーザー ID のマップ (max,min)) に) マッピングします。ここで、max、min は max/最小値またはそれらは値自体である可能性があります-それはあなた次第であり、必要なものです。このマップは、これらがインスタンス化するクラスの静的メンバーになります。基本的に、オブジェクトが作成されると、maxen と mins がキャッシュされます。これがコンストラクターにどのように組み込まれるかを理解するのは難しくありません。これにより、問題が大きくなるにつれていくらかのオーバーヘッドが追加されますが、多くの反復を節約できるため、おそらく価値のあるトレードオフです。

于 2014-10-13T15:15:48.643 に答える