【leetcode学习记录】

代码随想录个人学习记录

2021/7/14(leetcode)
  1. 在排序数组中查找元素的第一个和最后一个位置(34)【二分查找,分别查找左右边界】
  2. 有效的完全平方数(367)【二分查找】
  3. 比较含退格的字符串(844)【逆序双指针】
  4. 有序数组的平方(977)【双指针】
  5. 长度最小的子数组(209)【滑动窗口(双指针)】
  6. 水果成篮(904)【滑动窗口】
  7. 最小覆盖子串(76)【滑动窗口,困难】
  8. 螺旋矩阵 II(59)【设置上下左右边界】
  9. 螺旋矩阵(54)【设置上下左右边界,更容易理解】
2021/7/15(leetcode)
  1. 移除链表元素(203)

  2. 设计链表(707)

  3. 删除链表的倒数第 N 个结点(19)【尝试使用虚拟节点】

  4. 环形链表 II(142)【数学推导】

  5. 环形链表(141)【数学推导】

    ===============================

  6. 有效的字母异位词(242)【额外数组】

  7. 赎金信(383)【和上题一样的思路】

  8. 字母异位词分组(49)【字母异位词排序后的结果是一样的】

  9. 两个数组的交集(349)【容器可以使用别的容器的迭代器进行初始化

    ================================

  10. 找到字符串中所有字母异位词(438)【滑动窗口,按照模板写】

  11. 字符串的排列(567)【滑动窗口,按照模板写】

    ================================

  12. 两个数组的交集 (349)【hashset】

  13. 两个数组的交集 II(350)【hashmap】

  14. 四数相加 II(454)【hashmap】

  15. 两数之和(1)【hashset】

    ================================

  16. 三数之和(15)【双指针,去重,剪枝】

  17. 四树之和(18)【双指针,去重,剪枝】

2021/7/17【字符串】
  1. 反转字符串(344)
  2. 反转字符串II(541)
  3. 替换空格(5)【注意遍历时的边界判断】
  4. 翻转字符串里的单词(151)【整体反转 + 去除空格(双指针,考虑前后空格) + 部分反转】
  5. 左旋转字符串(剑指58)
2021/7/18【字符串】
  1. 实现 strStr()(28)【KMP算法】
    时间复杂度分析:
1. 遍历过程O(n):虽然在匹配失败的时候,next指针会回退,
	但回退的次数跟之前匹配成功的次数相关(也就是查找数组指针右移的次数),
   	而数组指针右移的次数不会超过n,所以回退的次数最多也就是n,总次数2n;
2. 构造next过程O(m):如上,总次数2m。
    【最坏情况例子:aaaabaaaac     寻找串:aaaaa】
    在b匹配失败时,要回退3次
    总共O(n + m)
2021/7/19【KMP算法】
  1. 重复的子字符串(459)【用到KMP算法】
/*  
理论:数组长度len -(next[len-1] + 1)就会得到最小的周期长度l(l != len,等于说明没有重复子串),
     如果len = n*l,则说明题目为true
*/
2021/7/20【双指针】
  1. 删除有序数组中的重复项(26)
  2. 移动零(283)
  3. 比较含退格的字符串(844)【!!!每个字符串回退到真正需要比较的字符】
  4. 有序数组的平方(977)【必须使用额外数组】
  5. 三数之和/四数之和(15/18)
    【1. 先排序 2. 剪枝:要注意target为任意值的判断条件 3. 双指针 4. 去重】
2021/7/21【栈 / 队列】

基础理论:栈和队列都是容器适配器,底层可以使用不同容器实现(默认使用deque),所以元素在内存中的数据分布取决于底层容器。

  1. 用队列实现栈(225)【实际只需要一个队列就可以实现】
  2. 有效的括号(20)
  3. 删除字符串中的所有相邻重复项(1047)
  4. 逆波兰表达式求值(150)
2021/7/22【栈 / 队列】
  1. 滑动窗口最大值(239)
  2. 前 K 个高频元素(347)【排序使用包含k个的小顶堆,优化时间复杂度至O(nlogk),注意堆的构造写法(包含容器和比较方式)】
2021/7/23【二叉树】

基础理论:数节点的代码编写;深度优先遍历(利用栈,无论是递归还是迭代),广度优先遍历(利用队列)

  1. 前序遍历(144)【注意迭代版的插入节点顺序】
  2. 中序遍历(94)【和其他两个不同】
  3. 后序遍历(145)【可通过修改前序遍历,最后反转结果得到】
2021/7/24【二叉树】

层次遍历

  1. 二叉树的层序遍历(102)
  2. 二叉树的层序遍历 II(107)
  3. 二叉树的右视图(199)
  4. 二叉树的层平均值(637)
  5. N 叉树的层序遍历(429)
  6. 在每个树行中找最大值(515)
  7. 填充每个节点的下一个右侧节点指针(116)
  8. 填充每个节点的下一个右侧节点指针 II(117)【普通二叉树,对于层次遍历没有区别】
  9. 二叉树的最大深度(104)【迭代法】
  10. 二叉树的最小深度(111)【迭代法,递归法也要注意】
2021/7/25【二叉树】
  1. 翻转二叉树(226)
  2. N 叉树的前序遍历(589)
  3. N 叉树的后序遍历(590)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值