Skip to content

Vinci-217/LeetCode-Daily-One

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LeetCode 题解

学习链接

算法知识

哈希

暴力做法每次拿两个数出来相加,和 target 比较,那么花费 O(1) 的时间,只获取了 O(1) 的信息。 而哈希表做法,每次查询都能知道 O(n) 个数中是否有 target−nums[j],那么花费 O(1) 的时间,就获取了 O(n) 的信息。 来自灵神的力扣题解

  • 哈希的作用是用 O(1)的时间复杂度查找元素是否存在于集合中。

双指针

  • 双指针的作用是遍历的时候优化时间复杂度。

一般而言,双重循环的复杂度是 O(n^2),而双指针通过头尾指针一次遍历将复杂度降到了 O(n)。

排序

  • TODO:快排手写(面试常考)

滑动窗口

回溯

使用回溯的主要目的是判断需要枚举每个路径,例如需要枚举子集,需要枚举二叉树每个节点判断目标和,所以会造成2的n次方的时间复杂度。通常可以通过剪枝减少一部分杂余的时间

回溯的使用场景:

  • 组合与排列问题(子集)
  • 约束满足问题(找target类型)
  • 路径搜索问题(二叉树的目标和)

动态规划

动态规划的是由于在某一定的条件下(区别一维和二维)每次计算都会有某些部分被重复计算了,所以要减少重复的计算。

动态规划的使用场景:

  • 重叠子问题(公共子序列)
  • 序列问题(最长递增子序列)
  • 划分问题(恰好装满:分割等和自子集)

贪心

二分

链表

二叉树

图论

字符串

  • 一个常用的比较字符串字母出现次数相等/不考虑顺序的子串的方法:用一个数组或者Map统计频率,比用集合高效且不容易出错

前缀和

  • 前缀和常用于求和的题目中,作用在于提前记录从0开始的数组的和,然后将求某区间的和的时间复杂度从O(n)转化为O(1)

单调队列

  • 单调队列三步:入、出、记录值

面试高频题

  • 206 反转链表(快手一面)
  • 手写LRU(快手二面)

About

坚持每天刷一道力扣

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages