面试高频题leetcode篇
参考题单:https://zhuanlan.zhihu.com/p/349940945
排序类基础题148 排序链表原题链接:https://leetcode.cn/problems/sort-list/
归并排序:
先快慢指针找到中点
切分
对子序列排序
merge
1.归并排序 (TOP-DOWN 自顶向下)把merge 拆分出去写 逻辑上更好理解一些
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) ...
lambda
C++12345678910111213141516171819202122232425262728/* lambda 直接表示函数*/// 在函数内定义function<int(int,int,int,int)> get = [&](int x1,int y1,int x2,int y2) -> int{ return 1;}// 为了不出错 直接写成 这样也好记一些auto get = [&](int x1,int y1,int x2,int y2) -> int{ return 1;}// 等于在函数外再定义一个 int get(int x1,int y1,int x2,int y2){ return 1;}/* 遇到结构体且无返回值的情况时 就尽量不要用auto了 否则容易出问题*/function<void(TreeNode*)> dfs = [&](TreeNode* root) {}
leetcode198打家劫舍
原题链接:https://leetcode.cn/problems/house-robber/description/
解法1动态规划
123456789101112131415161718192021222324252627/* 状态表示 f[i] 表示从前i家偷的最大值 注意这里的i表示 前i 这对后续的状态转移的理解很关键 状态计算 -> 以最后一家为界: 偷: f[i] = f[i - 2] + nums[i] 根据题目要求则只能从前 i-2 家偷的最大值转移而来 -> f[i - 2] + nums[i] 不偷: f[i] = f[i - 1] 则可以直接由上一家转移而来 即 f[i] = max(f[i - 1] , f[i - 2] + nums[i]) 但这样会产生负数下标 注意由于f[i] 可以理解存储的值的方式 那么可以直接把 f[i] 对应的全部 + 2 j 即规避了初始化问题*/class Solution {public: int rob(vector<i ...
leetcode1444-切披萨的方案
原题链接:https://leetcode.cn/problems/number-of-ways-of-cutting-a-pizza/
非常好的一道题 尤其整个将子问题划分的思想可以说是非常经典了
分析过程
代码记忆化搜索 - 递归12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061class Solution {public: int ways(vector<string>& pizza, int k) { const int MOD = 1e9 + 7; int m = pizza.size() , n = pizza[0].size(); int s[m + 1][n + 1]; memset(s,0,sizeof s); // 计算前缀和数组 用于判断是否存在苹果即是否可切 ...
经典DP问题
最为基础的DP模板 但真的无论过了多久都会忘掉
背包问题01背包问题最基础的DP问题 选择模型
f[i][j] 表示选前i个物品 体积不超过j的物品的最大价值不选当前物品的集合为 f[1…i-1][j] 其最大值为 max(f[1… i-1])选取当前物体的集合的最大值 f[i - 1][j - v[i]] + w[i] (从集合的体积中除去当前物品的体积 并加上当前物体的最大值)原题链接:https://www.acwing.com/problem/content/2/
基础解法
12345678910111213141516171819202122232425262728293031#include<iostream>#include<algorithm>using namespace std;const int N = 1010;int w[N],v[N]; // 价值与体积int f[N][N]; // f[i][j] 前i个物体中 体积不超过j的物品的价值最大值int n,m; // 物品件数n 与背包容量mint main() ...
yolo
yolov1
cvnotes
目标检测检测框生成
SS(Selective Search): 经典检测中用于生成检测框 较早RCNN中会用
优势
捕捉不同尺度
多样化
快速计算 即SS 是用于目标检测的区域提议算法 计算速度快 具有很高的召回率 基于颜色、纹理、大小和形状兼容计算相似区域的分层分组
RPN: Faster Rcnn 使用的检测框生成算法 效率更高RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已
RPN包括以下部分:
生成anchor boxes
判断每个anchor box为foregoroud(包含物体)或者background(背景) 二分类
边界框回归对anchor box进行微调 使得 positive anchor 和真实框(Ground Truth Box)更加接近
anchor:
感受野: 感受野也就是特征上的一个元素,对于输入图像的感受范围。 卷积层⬆ -> 特征感受野↑
在最后一层中 特征的感受野一般 ...
深度学习指标
目标检测中常用指标IoUIoU -> Intersection over Union -> 常用用于衡量目标检测任务中 预测结果的位置信息的准确程度IoU = (物体实际区域与推测区域重合的面积) / 两个区域整体所占的面积 (即两个区域的交集 / 两个区域的并集)IoU ⬆ -> 推测出的物体区域就越准确
GTGT(Ground Truth) -> 指真实的标签或真实的对象
常用指标
TP: True Postive -> IoU > 0.5 的检测框数量 -> 认为匹配成功
FP: False Postive -> IoU <= 0.5 的检测框 (或者检测到同一个GT的多余检测框的数量) 即本身不是目标 但被检测为目标
FN: False Negative -> 没有检测到的GT的数量 即漏检目标的数量
Precision: 查准率 TP/(TP + FP) 模型预测的所有目标中 预测准确的比例
Recall: 查全率 TP/(TP + FN) 所有真实目标中 ...
leetcode1590使数组和能被 P 整除
原题链接:https://leetcode.cn/problems/make-sum-divisible-by-p/
很有意思的一道前缀和的题目 直接从来没想过这种思路
123456789101112131415161718192021222324252627282930313233343536373839404142434445/* 记数组总和为S1 连续子数组为S2 移除子数组模数为0 即 (S2 - S1) % MOD P = 0 根据模运算法则即 S2 % P = S1 % P 用前缀和来表示子数组S2 = f[i] - f[j] 即 S1 % P = (f[i] - f[j]) % P = f[i] % P - f[j] % P 记 S1 % P = x 即为 f[j] % P = f[i] % P - x 使用hash表记录 f[j] % P (j 定义为i 前面的序列) 因此不断右移的过程 即可同时保存 f[j] % P 同时计算f[i] % P - x 判断是否符合条件*/class Solution & ...