剑指offer
文章平均质量分 63
学习剑指offer的笔记
NUC_Dodamce
醉生梦死谁成器,拓马长枪定乾坤。
展开
-
LeetCode刷题测试辅助(更好的二叉树打印)
这个题的要求就是打印一个二叉树,我们在此基础上进行修改,日后的二叉树问题,debug时就可以直接使用了,下面附上我的代码。原创 2023-05-29 12:37:34 · 207 阅读 · 0 评论 -
C++_BitSet位图(大数处理_C++实现+位图面试题分析+变形)
文章目录1.位图概念2.面试题引出位图C++实现简单的位图3.位图的变形题代码位置1.位图概念位图概念:所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景通常是用来判断某个数据存不存在的。2.面试题引出位图给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】解决思路:首先分析40亿个不重复的整数加载到内存需要的空间大小1G=10^9=10亿字节一个整数=4个字节4G=40亿字节=10亿整数所以40亿整数大概需要16原创 2022-01-16 15:07:13 · 472 阅读 · 0 评论 -
C++_海量数据处理布隆过滤器(位图+哈希_C++实现_应用分析)
C++BitSet位图位图的优缺点位图的优点:节省空间,速度快。位图的缺点:只可以处理整数。文章目录1.布隆过滤器提出2.布隆过滤器概念3.C++实现布隆过滤器1.布隆过滤器提出1.新闻客户端推荐系统如何实现推送去重2.论坛用户创建昵称去重等等各种问题用哈希表存储用户记录,缺点:需要空间太大用位图存储用户记录,使用C++哈希中的字符串特换成整数映射到位图中。缺点:无法处理字符串转化为整数的冲突问题,会导致用户昵称没有用过,但还是判定使用过的问题所以将哈希与位图结合,即布隆过滤器原创 2022-01-16 18:34:23 · 526 阅读 · 1 评论 -
剑指 Offer正则表达式匹配 C++ dp 无优化+批注 (动态规划五部曲)/递归匹配
转载:原评论位置文章目录1.dp2.递归1.dpclass Solution {public: bool isMatch(string s, string p) { int size_Soc=s.size(); int size_Part=p.size(); //动态规划五部曲 1.状态定义 2.状态转移 3.初始化 4.遍历顺序 5.返回形式 vector<vector<bool>>dp(size.转载 2022-05-16 12:11:02 · 131 阅读 · 0 评论 -
剑指 Offer 顺时针打印矩阵 C++ dfs遍历,循环判断方向
class Solution { vector<vector<int>>dict={{0,1},{1,0},{0,-1},{-1,0}}; void dfs(vector<vector<int>>&matrix,vector<vector<bool>>&visit,int&pos,vector<int>&ret,int Row,int Col,int row,int col).原创 2022-05-16 10:36:59 · 205 阅读 · 0 评论 -
寻找唯一成对的数字
题干:1到100的数字放到101大小的数组中,数组最后一个数组是1到100的数字,请找到唯一成对的数字。方法一:使用额外空间。再开辟一个数组,原数组每一个元素的值对应到新数组上。如果是成对的数字,则对应新数组上的值为2,不成对数字为1....原创 2021-07-19 19:35:19 · 226 阅读 · 0 评论 -
单链表判断是否带环,寻找环起始点(图文解析)
文章目录1.判断单链表是否带环为什么快指针走2步,慢指针走1步一定可以相遇如果快指针每次不是走两个节点,是否还会相遇2.找入环点1.判断单链表是否带环给定一个单链表,如果带环返回true,不带环返回false.这里设了两个指针,快指针一次走两个节点,慢指针一次走一个节点。那么如果两个指针在环里相遇,表明单链表带环,如果fast->next==/NULL表明不带环,fast==NULL表明空链表也返回false.接口代码如下://struct ListNode //{ // int原创 2021-04-13 17:36:57 · 1777 阅读 · 3 评论 -
剑指offer_二叉树的打印合集(C++_上下打印.换行打印.之字打印_bfs+栈与队列+用表格模拟栈队列操作)
原题链接文章目录思路思路原创 2021-10-06 21:06:24 · 1818 阅读 · 17 评论 -
剑指offer_二叉树和为某一个值的路径(栈保存路径,二叉树的前序遍历+表格模拟栈操作)
原题链接文章目录思路C++代码思路首先:要求二叉树的每个节点上的值,一定需要遍历二叉树,并且要先访问根节点。在二叉树的三种遍历方式中先访问根节点为二叉树的前序遍历。题目要求打印路径,从根节点到最后的叶节点才是一条路径。其次考虑,题干要求返回的是二叉树节点路径,所以我们需要定义一个空间来存放路径。再考虑查找的过程,以上题为例子操作路径节点路径和目标值入节点10101022入节点510 51522入节点410 5 41922路径和!=目标原创 2021-10-07 21:13:36 · 591 阅读 · 8 评论 -
剑指offer_复杂链表的复制(C++_三种方法_时间O(N^2)空间O(1)_复杂问题的拆分 / 时间O(N)空间(N)_哈希表_图解映射 / 时间O(N)空间(1)_链表拆分)
原题链接1.时间复杂度为O(N^2)空间复杂度为O(1)思路这种思路非常的简到直白,就是将复杂问题拆分开。先复制next节点,最后在复制原创 2021-10-10 11:54:10 · 376 阅读 · 6 评论 -
剑指offer_正则表达式的匹配(C++递归+所有输入情况分析)
原题链接原创 2021-10-04 20:48:13 · 228 阅读 · 4 评论 -
剑指offer_二叉树的重构(一张图搞定二叉树的两种递归重构方式)
原题链接文章目录关于二叉树重构的思考第一种递归重构方式(前序+中序)的图文思路C++代码实现关于二叉树重构的思考这类题目一般是给定二叉树的前序,后序遍历,又已知二叉树的中序遍历,求二叉树的结构1.二叉树的前序遍历可以知道第一个数字是二叉树的根节点,如果在搭配二叉树的中序遍历。我们通过扫描二叉树可以求得二叉树的左子树有几个节点,右子树有几个节点。只有这样才可以递归下去重构二叉树2.同理如果已知二叉树的后序遍历和中序遍历,二叉树的后序遍历最后一个节点是二叉树的根节点,扫描中序遍历也可以知道二叉树左右原创 2021-10-01 15:07:31 · 168 阅读 · 2 评论 -
剑指offer_表示数值的的字符串(C++_逻辑判断与思维的全面性)
原题链接文章目录思路思路这道题主要是要全面考虑测试用例设输入的原字符串为str首先:str不能原创 2021-10-05 18:33:29 · 147 阅读 · 5 评论 -
剑指offer_机器人运动的范围 (C++_DFS、BFS,递推迭代)
原题链接文章目录思路C++代码思路1.首先将机器人放到第一格位置,从第一格判断结束后分别对周围所有格子在进行判断。同时为了防止格子被重复判断,要新建立一个bool类数组来标记格子是否走过。2.为了使代码的逻辑性更强,我们把这个过程分成三部,用三个函数来实现,①从起点开始,往下递归,②判断其是否越界以及格子是否被走过,③将格子所在的行列的数字拆分后求和与题中的threshold对比C++代码class Solution {public: int movingCount(int thre原创 2021-10-01 10:16:57 · 226 阅读 · 3 评论 -
剑指Offer_旋转数组的最小值(图解二分查找)
原题链接注意:直接遍历数组复杂度为O(N)不符合题目要求文章目录基础分析特殊样例分析1.输入数组为空或数组大小为12.旋转了0个元素,即数组还是有序的。3.因为重复元素导致无法区分中值是在那个数组的情况代码实现基础分析观察样例数组旋转后,数组可以看作两个排序后的子数组,而前面数组的元素都大于第二个数组。其中最小值正好位于两个数组的分界线,可以联想到二分法查找一个指针指向数组的开始,一个指针指向数组的结束。第三个数组指向中间元素(begin+end)/2根据二分思想如果arr[mid]对应的数字原创 2021-09-28 09:11:15 · 170 阅读 · 6 评论 -
剑指offer_剪绳子(C++_动态规划/图解贪心算法)
原题链接文章目录动态规划1.思路动态规划1.思路可以分析出来,因为题目要求必须剪。当绳子的长度小于2的时候不能剪了,这里原创 2021-09-29 20:28:19 · 412 阅读 · 6 评论