文章分类 -  代码随想录训练营

训练营随笔
摘要:239. 滑动窗口最大值 如何想到用队列这个数据结构我觉得得看经验,这个题目是经典的单调队列的问题,设想我们有一个队列来依次装进入队列的元素,我们要求的是最大值,那么如果后面来了一个大值,前面的小值一定不会作为答案输出,因为后面那个大值在窗口存活的时间更久并且前面的小值更早被弹出,所以这个小值是不可 阅读全文
posted @ 2024-02-19 10:38 ccnju 阅读(12) 评论(0) 推荐(0)
摘要:20. 有效的括号 这个题目并没有优先级的考虑,只需要匹配好括号就可以了。左括号是怎么来的,那么右括号就是怎么匹配上的,感觉这里解释起来就很抽象,用栈就很直观的解决了,但是不知道该怎么解释如何想到的?左括号是进栈,右括号是对应着消除,退栈。 class Solution { public: bool 阅读全文
posted @ 2024-02-06 12:12 ccnju 阅读(22) 评论(0) 推荐(0)
摘要:344 反转字符串 思路:使用两个指针一前一尾,逐个交换即可 class Solution { public: void reverseString(vector<char>& s) { int l = 0, r = s.size() - 1; while(l < r) { swap(s[l++], 阅读全文
posted @ 2024-01-05 10:54 ccnju 阅读(8) 评论(0) 推荐(0)
摘要:三数之和 区别于两数之和,这题使用哈希表就比较麻烦了,如果要使用哈希得存一个pair对吧,因为这个时候是三元了。 如何找到三元组呢?先固定一个,剩下变成了两数之和了,问题转化为,确定一个数字,在后面的区间寻找两个数字之和等于这个数字的相反数。 我们可以使用先排序后用双指针的方法去寻找这两个数字 另一 阅读全文
posted @ 2024-01-04 15:17 ccnju 阅读(12) 评论(0) 推荐(0)
摘要:242有效的字母异位词 要求出现频次相同,使用一个数组记录s的字母出现次数,对应s中的字符频次++,对于t中的频次--,如果s和t的字母组合相同,则最终的数组应该是全零。 class Solution { public: bool isAnagram(string s, string t) { if 阅读全文
posted @ 2024-01-01 14:59 ccnju 阅读(19) 评论(0) 推荐(0)
摘要:问题:给你一个链表头,如何判断这个链表里面是否存在环?用快慢指针,为什么快慢指针能找到环呢? 想不明白就把这个环展开,_____ | _____ | _____只要存在速度差,走得快的一定能赶上速度慢的,在换上标记坐标,0,1, 2,3...n-1, 0, 1, ... 每个坐标表示一个位置,小明( 阅读全文
posted @ 2023-12-30 16:01 ccnju 阅读(22) 评论(0) 推荐(0)
摘要:今天有些状态不佳,总结就随便写写了( 虚拟头节点在链表题中是一个很好的方法,能够帮助我们简化判断逻辑。 通常虚拟头节点的使用是定义一个虚拟头节点,然后把head挂在dummyhead后面,使用cur指向dummyhead,然后对cur->next进行循环判断 设计链表 class MyLinkedL 阅读全文
posted @ 2023-12-29 17:00 ccnju 阅读(55) 评论(0) 推荐(0)
摘要:滑动窗口 首先复习滑动窗口的模板形式: for(int i = 0; i < n; ++i) { while(check()) { // calculate len of i->j j++; } } 关于时间复杂度,因为j是不回头的,最多从0->n 而i也是从0->n,所以时间复杂度是O(n+n) 阅读全文
posted @ 2023-12-28 17:02 ccnju 阅读(13) 评论(0) 推荐(0)
摘要:二分查找 二分最关键的在于确定区间划分的形式,是要用[l, r]还是[l, R) 一旦确定形式,在查找过程中就不改变了。 具体逻辑(l, r 是怎么变)想想就不会错了 class Solution { public: int search(vector<int>& nums, int target) 阅读全文
posted @ 2023-12-27 19:05 ccnju 阅读(11) 评论(0) 推荐(0)