snippets 0.1.0
Loading...
Searching...
No Matches
dominant_tracker.hpp
Go to the documentation of this file.
1#ifndef DOMINANT_TRACKER_H
2#define DOMINANT_TRACKER_H
3#include <optional>
4#include <unordered_map>
5namespace hsc_snippets
6{
12 {
13 private:
14 int size;
15 std::unordered_map<int, int> m;
16 int max_value;
17 int max_freq;
18
19 public:
23 DominantTracker() : size(0), m(), max_value(), max_freq(0) {}
28 void add(int value)
29 {
30 size += 1;
31 auto it = m.find(value);
32 if (it == m.end())
33 {
34 m.insert(it, {value, 1});
35 if (max_freq < 1)
36 {
37 max_freq = 1;
38 max_value = value;
39 }
40 }
41 else
42 {
43 it->second += 1;
44 if (max_freq < it->second)
45 {
46 max_freq = it->second;
47 max_value = value;
48 }
49 }
50 }
51
58 std::optional<int> getDominant() const
59 {
60 if (size == 0 || ((max_freq << 1) <= size))
61 {
62 return std::nullopt;
63 }
64 else
65 {
66 return max_value;
67 }
68 }
69 };
70
71}
72#endif // DOMINANT_TRACKER_H
Definition dominant_tracker.hpp:12
DominantTracker()
Definition dominant_tracker.hpp:23
void add(int value)
Definition dominant_tracker.hpp:28
std::optional< int > getDominant() const
Definition dominant_tracker.hpp:58
Definition big_integer.hpp:14