Yr233
Yr233
全部文章
分类
归档
标签
去牛客网
登录
/
注册
Yr233的博客
全部文章
(共7篇)
题解 | 滑动窗口的最大值
使用头尾都可以插删的双端队列,同时保证单调递减,这样头就是最大的了。由于滑动窗口大小固定,我们可以直接在nun上原地修改,当然这样意义不大。因为判断是否在窗口内的同时还要知道数值,存下标是自然的选择。为什么判断pop_front是if而非while?因为窗口是一步一步往后移动的,元素自然也只需要一个...
2025-11-25
0
15
题解 | 链表中的节点每k个一组翻转
可以根据喜好选择写法。 class Solution { public: ListNode* reverseList(ListNode* head, ListNode* tail) { ListNode* prev = nullptr; ListNode* c...
2025-11-25
0
12
题解 | 删除有序链表中重复的元素-II
居然是所有的重复元素都要删除,那么检查每个结点时自然需要站在其前一个的视角,因此我们首先创建一个哑结点。对于任何结点,检查它是否和它的下一个数值相等,相等的话这一整条都跳过,不更新链表。不相等的话更新prev即可。记住每次让正在构建的链表尾部指向空,因为只是单纯指向一个结点的话,它后续的结点也会一起...
2025-11-25
0
11
题解 | 链表内指定区间反转
首先创建一个哑结点,方便后续操作。找到指定区间的第一个的前一个结点。进行n-m+1次反转链表的操作就行了。 class Solution { public: ListNode *reverseBetween(ListNode *head, int m, int n) { if...
2025-11-25
0
11
题解 | 用两个栈实现队列
两个栈来回倒腾即可,结点先直接丢进stack1,当stack2为空时,将stack1所有的结点都丢进去,弹出stack2的节点。 class Solution { public: void push(int node) { stack1.emplace(node); ...
2025-11-25
0
12
题解 | 删除有序链表中重复的元素-II
先创建一个哑结点,用prev指针指向它,方便后续操作。如果head有下一个结点,且二者值相同,我们就一直往后走,出来之后head指向下一个,prev的下一个暂时指向空,如果这个过程没有发生,说明这个值没有重复,prev的下一个指向head,prev更新为head。class Solution {pu...
2025-11-25
0
10
题解 | 合并k个已排序的链表
其实直接将结点丢进数组里快排就行了。class Solution {public: ListNode *mergeKLists(vector<ListNode *> &lists) { vector<ListNode *>v; for (auto hea...
2025-11-25
0
10