150. 逆波兰表达式求值
题目链接/文章讲解/视频讲解:代码随想录
这道题用栈处理较为方便,将数字入栈。遇到相应的运算符就将两个数字出栈然后运算后入栈。此题若用数组处理则还要考虑不同类型的数据处理问题,用栈可以方便地从左到右操作。
239. 滑动窗口最大值
题目链接/文章讲解/视频讲解:代码随想录
这道题的思路不好想,若用暴力解法则时间复杂度是o(n*k),采用队列可以减少时间复杂度。为什么这题用队列不用栈?因为这题有“先进先出”的题意,因此用队列更为合适。我们会有惯性思维就是要三个数入队列,但实际上,只需让三个数中最大的数入队列,然后最大数前面的数弹出,最大数后面的数保留,这样遍历完整个数组,时间复杂度较小,也不会遗漏数据。这道题的难点在于要想到自己构造一个新的队列类型,使之能够实现push的同时弹出元素,pop时只弹出队列第一个元素的功能,这就需要运用到deque双向队列,这种队列两端都可以实现入队列和出队列的功能。
347.前 K 个高频元素 (有点难度,可能代码写不出来,一刷至少需要理解思路)
题目链接/文章讲解/视频讲解:代码随想录
这道题我刚开始的想法是用map存储然后用sort排序(但是一直报错。。。),这样时间复杂度是nlogn,可不可以使时间复杂度再降低一点呢?注意到我们并不需要将所有元素都排序,因此我们只需获取前k大出现频率的数据即可。因此,我们可以运用priority_queue,做到这一点。关于priority_queue,我们应该采用大顶堆还是小顶堆呢?如果采用大顶堆,那么我们pop时会先pop父节点,这样就导致了我们最后留下的是前k小的出现频率,不合题意,因此应该采用小顶堆。定义priority_queue<pair<int,int>,vector<pair<int,int>>,cmp>,再结合map即可实现该功能。

3599

被折叠的 条评论
为什么被折叠?



