1 字典树(Trie)
2 实现方法
1 | class Trie: |
先run一下
1 | class Trie: |
滑动窗口用来解决一些查找满足一定条件的连续区间的性质(长度等)的问题。由于区间连续,因此当区间发生变化时,可以通过旧有的计算结果对搜索空间进行剪枝,这样便减少了重复计算,降低了时间复杂度。
1 | left = 0 |
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。
1 | 输入:s = 7, nums = [2,3,1,2,4,3] |
1 | class Solution: |
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
1 | 输入: "abcabcbb" |
1 | 输入: "bbbbb" |
1 | 输入: "pwwkew" |
1 | class Solution: |
给定一个由若干 0
和 1
组成的数组 A
,我们最多可以将 K
个值从 0 变成 1 。
返回仅包含 1 的最长(连续)子数组的长度。
1 | 输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2 |
1 | class Solution: |
给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。
1 | 输入: S = "ADOBECODEBANC", T = "ABC" |
说明:
""
。1 | class Solution: |
1 | class Solution: |
给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t 。
1 | 输入: "eceba" |
1 | 输入: "ccaabbb" |
1 | class Solution: |
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的子串。
1 | 输入: s1 = "ab" s2 = "eidbaooo" |
1 | 输入: s1= "ab" s2 = "eidboaoo" |
1 | class Solution: |
给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。
注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。
1 | 输入: |
1 | 输入: |
1 | class Solution: |
你有 k 个升序排列的整数数组。找到一个最小区间,使得 k 个列表中的每个列表至少有一个数包含在其中。
我们定义如果 b-a < d-c 或者在 b-a == d-c 时 a < c,则区间 [a,b] 比 [c,d] 小。
1 | 输入:[[4,10,15,24,26], [0,9,12,20], [5,18,22,30]] |
1 | class Solution(object): |
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
1 | 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 |
1 | 类似于单调队列的思想 |
1 | class Solution: |
偏差:描述模型输出结果的期望与样本真实结果的差距。
方差:描述模型对于给定值的输出稳定性。
如果模型不能很好地拟合训练数据,则模型具有高偏差(也称欠拟合 - Underfitting);
反之,如果模型能够很好地拟合训练数据,但在测试数据上有较大的误差,则模型具有高方差(也称过拟合 - Overfitting)。
True Positive Rate(真阳率)、False Positive(伪阳率)
朴素贝叶斯法(Naive Bayes):基于贝叶斯定理与特征条件独立的分类方法。
求解无约束最优化问题的极小值
通过不断的迭代,进行目标函数的极小化,直到收敛
极小化 $f(x)$ ,则 $x-x_0 = -f’(x_0) * \lambda$ ,其中 $\lambda > 0 $
$ x = x_0 - \lambda * f’(x_0)$ ,其中学习率 $\lambda > 0 $
牛顿法,又称牛顿迭代法,主要是迭代的方法用于求解方程的根。后应用于无约束问题的最优化。
利用泰勒公式一阶展开,$f(x) = f(x_0) + (x-x_0) f’(x_0)$
求解方程 $f(x) = 0$, 则 $f(x_0) + (x-x_0) f’(x_0) = 0$
推出,$x = x_0 - \frac{f(x_0)}{f’(x_0)}$
算法流程:
不断迭代 $x_{k+1} = x_k - \frac{f(x_k)}{f’(x_k)}$,
直至 $f(x_{k+1}) = 0$
举例如下:
求解$\sqrt2$ , 保留 5位小数
思路:设计 $y = f(x)$, 将$x = \sqrt2$ 代入,$y = 0$, 故 $f(x) = x^2 -2$
1 | class Solution: |
利用泰勒公式二阶展开
函数$f(x)$ 在 $x_0$有极值的必要条件是 $f’(x_0) = 0$
引入Hessian矩阵
其中,$g_k$ 是一阶导(梯度),$H_k$ 是Hessian矩阵
避免每次都要计算Hessian矩阵,采用正定矩阵近似方法实现
Leetcode 300: 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。
1 | 输入: [10,9,2,5,3,7,101,18] |
1 | class Solution: |
基于贪心的思想,并结合二分查找解题。
新建数组 res,用于保存最长上升子序列。对原序列进行遍历,将每位元素二分插入 cell 中。
总之,思想就是让 res 中存储比较小的元素。这样,res 未必是真实的最长上升子序列,但长度是对的。
1 | class Solution: |
Leetcode 354 俄罗斯套娃娃信封问题
给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。
请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。
说明:
不允许旋转信封。
示例:
1 | 输入: envelopes = [[5,4],[6,4],[6,7],[2,3]] |
思路:
1 | class Solution: |
假如存在两封信封的宽度相同,且同样宽度也可以塞进去(即大信封的宽度和高度都不小于小信封的高度和宽度),怎么处理?
思路: