字节跳动算法工程师笔试(2019.8.11)
四道题,跟想象中难度差不多,但是没想到因为卡了一下时间有点紧没搞出最后一题🤣有点难顶。
第一题,感觉是时间化成分钟,然后排序找一下最大的符合条件的时间,不知道为什么只有80;
第二题,手玩一下可以发现其实可以一个个推出来的,一开始头脑有点蒙交了个O(n*k)的东西上去,只有83.33。。。其实推的时候可以处理一下答案的前缀异或和,复杂度可以降到O(n),这题100;
第三题,一开始想dfs+记忆化,如果遇到左右有工龄小的再递归搜下去(印象中去年CCPC桂林有一道类似的题,当时现场AC了)。然后发现n只有1000,所以想了个简单点的,首先将工龄离散化到[0, 1000]以内,然后对于每一个离散化后的工龄,找属于这个工龄的人,然后给他符合题目的奖金,注意边角特殊判断,这样就可以有序的逐步得到奖金了,复杂度是O(n^2),得分100;
第四题,这题没写完,讲一下我的理解。其实转化一下题意就是求树上%3=0, 1, 2的路径数量是多少,最终答案分别*3, *2, *1就可以了。然后就感觉是做两次树DP,第一次树DP求出以当前节点为端点,长度分别为%3=0, 1, 2的路径的数量。第二次树DP,求以当前节点为根的树中,树上%3=0, 1, 2的路径数量。假设我们选0为根节点,那么我们最终的答案就是dp[0][0],dp[0][1],dp[0][2], 父亲和单个子节点之间的转移非常明显,就是增加了父亲到孩子的这一条边,转移过来就是0->1,1->2,2->0,然后多的这一条边记得加上去;然后两个子节点之间也是可以通过父亲进行连接的,然后就懵了。。如果给颗菊花树出来,妥妥的TLE。。。纠结了很久没,打算写一发试试然后发现没时间了。。;
以上是大概的想法,写的比较乱,抛砖引玉,欢迎各位大佬来交流🤣🤣🤣