[面试经验] 骨狗10/04电面

今早10点面完,投的是tool & Instra 的组,面试的人是因姐,口音还可以,基本交流没压力。
但是感觉10有8,9要挂,就来波面经帮助大家吧,新鲜出炉的挂经。
感觉题目不算难,就是自己发挥的不好,希望大家比如翻我的错误,也给我家点,多点回复,我现在只能多看看别家面经了。唉,没把握好机会。
题目如下:

题目一上来就要设计数据结构,输入是数字和它的频率的pair,eg. (2, 4), 要求两个功能 push新的pair,pop频率最大的pair,要求tie时返回最近输入的

会不会通过push同一个数字的pair来更新频率?

如果无需更新已有数字频率,就用priority_queue存stack,priority是频率,stack里是按push输入顺序存的数字

如果需要更新已有数字频率,就用priority_queue存链表,priority是频率,链表里是按push输入顺序存的数字,外加一个hashtmap<int, pointer>直接指向pq中已存数字的链表位置

补充内容 (2018-10-5 05:43):
每次需要更新一个频率时,则找到该数字在pq中的位置,计算这个数字的新频率(旧频率+输入频率),把它作为一个新pair push进来

补充内容 (2018-10-5 05:44):
在push 新pair之前要把旧node删掉

补充内容 (2018-10-5 05:49):
还有一些细节没有考虑到,不过这是我的大体思路,push 是 o(logn), pop 是 O(1)

感觉像劣叩扒玖误

比那个难度更大,因为每次pop是所有这个元素和频率,不是一次一次,push进来的元素频率也是>=1的,

直接用map记录频率,key是数值value是对应频率,另外用两个变量记录当前最大频率和最大频率对应的数值,最新更新的大于等于最大频率的时候更新这两个变量,最新的总能覆盖掉之前的

感谢分享!