moenya
moenya
全部文章
题解
归档
标签
去牛客网
登录
/
注册
moenya的博客
全部文章
/ 题解
(共7篇)
题解 | #链表中的节点每k个一组翻转#
每k个结点反转一次链表即可,但是注意不足k的话要直接返回。 用递归来写就行。 class Solution { public: ListNode* reverseKGroup(ListNode* head, int k) { ListNode *node=head; ...
C++
链表
2022-04-27
0
488
题解 | #重排链表# 快慢指针+合并
可以把链表分成两个部分,前半和后半 反转后半,再合并即可 快慢指针找到中间的节点,然后前半的第一个指向后半的第一个,后半的第一个指向前半的第二个 class Solution { public: //快慢指针找中点 ListNode* findmid(ListNode* head) ...
C++
指针
2022-04-16
0
423
题解 | #合并k个已排序的链表#优先队列
最简单的方法就是遍历一次,俩俩归并,但可以优化。 需要维护当前每个链表没有被合并的元素的最前面一个,k 个链表就最多有 k 个满足这样条件的元素,每次在这些元素里面选取 val 属性最小的元素合并到答案中。在选取最小元素的时候,我们可以用优先队列来优化这个过程。 struct compare{ ...
C++
链表
优先队列
2022-04-16
0
665
题解 | #螺旋矩阵#
定义上下左右四个边界即可,注意条件有row和col等于0的情况,需要特判 public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int&g...
C++
模拟
2022-04-15
0
448
题解 | #三数之和# 双指针
「不重复」的本质是什么?我们保持三重循环的大框架不变,只需要保证: 第二重循环枚举到的元素不小于当前第一重循环枚举到的元素; 第三重循环枚举到的元素不小于当前第二重循环枚举到的元素。 同时,对于每一重循环而言,相邻两次枚举的元素不能相同 class Solution { public: ...
C++
双指针
2022-04-15
0
548
题解 | #最长回文子串# 中心扩散法
中心扩散法,回文串肯定是要对称的。 首先往左寻找与当期位置相同的字符,直到遇到不相等为止。 然后往右寻找与当期位置相同的字符,直到遇到不相等为止。 最后左右双向扩散,直到左和右不相等。 class Solution { public: int getLongestPalindrome(st...
C++
双指针
2022-04-13
0
527
题解 | #设计LRU缓存结构#
用一个双向链表,哈希表存key以及双向链表的迭代器。 当需要插入新的数据项的时候,如果新数据项在链表中存在(一般称为命中),则把该节点移到链表头部,如果不存在,则新建一个节点,放到链表头部,若缓存满了,则把链表最后一个节点删除即可。 在访问数据的时候,如果数据项在链表中存在,则把该节点移到链表头部,...
C++
哈希表
双向链表
2022-04-13
11
734