今天OA碰到一道题,由于时间不够没做出来,但是回头来看还是不难的,题目基本已经告诉你要用mono increasing stack 了。而且之前你也练习过模版,实际上套用一下就好了。时间不够还是因为你之前浪费了太多时间,包括第一道题。有时候通过简单的计数就可以解决的问题被你想复杂了。
不过有一道题类型是我没见过的,university career fair这道题属于interval scheduling,meeting room应该算是同类型的吧?但是自己还是没能马上做出来。我觉得还是熟练度不够。但看过Wikipedia之后发现这种问题有统一的算法解,就直接套用greedy就可以了。也算是学到东西了。就是按照每个meeting结束时间来排序,然后算最大或者你想要的结果。
第一步,把最早结束的meeting取出来,然后把有overlap时间的meeting全部剔除,再往后计算结果就可以得到最佳答案。原文如下
The following greedy algorithm does find the optimal solution:
- Select the interval, x, with the earliest finishing time.
- Remove x, and all intervals intersecting x, from the set of candidate intervals.
- Repeat until the set of candidate intervals is empty.
建图是一个很重要的步骤,要学会如何建图,参考城主的视频我觉得可以,里面建图方式如何实现都可以学习一下,然后再练习如何实现这个算法。先把图论里面所有算法都熟练掌握才可以。