c++ - Implement the stack that pops the most frequently added item -
i asked implement stack pops added item in interview. gave him below answer not happy solution.
class stack { // map of value , count map<int,int> cntmap; public: void push(int val) { // find val in map // if found increment map count // else insert pair (val,1) } int pop( ) { // find key in cntmap max value // using std::max_element // decrement cntmap count popped val } }
can me correct approach?
it's interesting question, because in push
, using key, , in pop
, using mapped value. std::map
supports first immediately: have is:
++ cntmap[ val ];
the []
operator insert entry if key isn't present, initializing mapped type default constructor, int
results in 0
. don't need if
.
the second more difficult. comments, however, give solution: need custom compare
, takes 2 std::pair<int, int>
, , compares second element. std::max_element
return iterator entry you're interested in, can use directly. far (and simple), have consider error conditions: happens if cntmap
empty. , might want remove element if count goes down 0
(again, simple, since have iterator designating entry, both key , value).
finally, if interview question, definitly point out pop
operation o(n)
, , might worthwhile (although more complicated) maintain secondary index, find maximum element more quickly. (if interviewing, next question. advanced programmers, however.)
Comments
Post a Comment