![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
力扣刷题专项
文章平均质量分 78
xxx量化研究方法
我就是很懒,什么都没写。
展开
-
面试经典150题【141-150】
剪枝:我们可以使用 Trie结构进行建树,对于任意一个当前位置 (i,j)而言,只有在 Trie 中存在往从字符 a 到 b 的边时,我们才在棋盘上搜索从 a 到 b 的相邻路径。对所有的边缘O进行dfs遍历,将其变为#.再将所有的内陆的O变为X,再将#变为O即可。首先一个多叉树里面应该有两个属性,是否结尾,下面的元素。添加的时候,如果没有,就新增一个TrieNode就行。当然对于DFS,更通用的模版是先访问,不管是否能访问。最广泛的是用BFS去得到每一个入度为0的,直到最后。原创 2024-04-06 10:56:20 · 508 阅读 · 0 评论 -
面试经典150题【131-140】
/ 找第一个等于target的位置// 重点} else {// 最后一个等于target的位置left = 0;// 重点} else {以找最左边的first为例,即使找到了,也要再做一次right = mid-1;继续遍历。直到不等于(即越界)原创 2024-04-03 17:17:59 · 1128 阅读 · 0 评论 -
面试经典150题【121-130】
如果不想提前塞入[2,6]这后面四个的话,可以选择当弹出 j=0的时候同时塞入(i,j+1)和(i+1,j)比如nums1={1,2,3,4,5}. nums2={6,7,8,9,10}先把[1,6],[2,6],[3,6],[4,6],[5,6]塞入到优先队列里。每次出来一个就选择(i,j+1)塞入队列,比如[1,6]出来了就塞入[1,7]左边维持一个大根堆,右边维持一个小根堆。要不只塞左上角一个,如果弹出的是第一列的,还要再多塞入一个下一行的最左边的。对于{-1,-1,-1}这种,也要取一个数字。原创 2024-03-31 00:09:23 · 901 阅读 · 0 评论 -
面试经典150题【111-120】
建立数组的时候长度要加一,不然直接dp[0][0]为s1前1个字符和s2前1个字符能不能组成s3的前2个字符,这显然是不合适的。其中,dp[i-1][j-1] 表示替换操作,dp[i-1][j] 表示删除操作,dp[i][j-1] 表示插入操作。第一行和第一列用来缓冲,1 到 length 这些索引才是符合题意的,因为要兼容第二行的 i-1,j-1之类的需求。dp[i][j] 表示 由s1的前i个字符 和 s2 的前j个字符,能不能组成s3的前 i+j 个字符。M是很大的,N是很小的。原创 2024-03-27 20:12:34 · 937 阅读 · 0 评论 -
面试经典150题【101-110】
用哈希表就是,先确定一个点(N),计算与其他所有点(N)的斜率,将斜率k存储到哈希表中。先在每一行下棋,然后下一行,然后回溯到这一行没下。递推公式: dp[i][j]=dp[i-1][j]+dp[i][j-1];然后ij都从1开始循环也蛮好的。暴力的话就是先确定两个点,再依次遍历其他的点,看斜率是否等于AB的斜率。HashMap应该是针对于每一个 i 点的,则每一个 j 点都要统计。三个点,ABC,AB和BC的斜率应该一样。这个是倒序的,从三角形的下边到上面。直接二分去搜,牛顿的数学太复杂。原创 2024-03-26 22:47:30 · 386 阅读 · 0 评论 -
面试经典150题【91-100】
排列问题,讲究顺序(即 [2, 2, 3] 与 [2, 3, 2] 视为不同列表时),需要记录哪些数字已经使用过,此时用 used 数组;组合问题,不讲究顺序(即 [2, 2, 3] 与 [2, 3, 2] 视为相同列表时),需要按照某种顺序搜索,此时使用 begin 变量。做一个helper函数,终止条件,dfs,这一步要加的,dfs,减去这一步加的。注意dfs中的i , 从begin到len , 并且也要传递到下一个dfs中去。一维dp的子问题,基本就是与dp[i-1]和dp[i-2]有关系。原创 2024-03-25 21:27:37 · 867 阅读 · 0 评论 -
面试经典150题【81-90】
如果 key 不存在,使用 key 和 value 创建一个新的节点,在双向链表的头部添加该节点,并将 key 和该节点添加进哈希表中。然后判断双向链表的节点数是否超出容量,如果超出容量,则删除双向链表的尾部节点,并删除哈希表中对应的项;通过哈希表定位到该节点在双向链表中的位置,并将其移动到双向链表的头部,最后返回该节点的值。如果 key 存在,则与 get 操作类似,先通过哈希表定位,再将对应的节点的值更新为 value,并将该节点移到双向链表的头部。截取出那段要反转的链表,然后用多个节点,遍历即可。原创 2024-03-18 23:23:22 · 939 阅读 · 1 评论 -
面试经典150题【71-80】
首先要明白,maxGain求的是什么,求的是经过我这个root节点以后,单边的最大值。因为只有这样,才能搞 root.val +maxGain(root.left) +maxGain(root.right)的值为最大。不过因为是完全二叉树,则可以判断是否完全,若是完全则直接2的n次方-1,否则就DFS,简单的BFS即可,当 i == size -1 的时候加入答案数组中。要不p,q在root的两侧,要不p和q其中一个是root一个是小弟。如果找到一个节点,就返回一个节点。如果只有一个有值,则为其中的一边。原创 2024-03-10 10:30:30 · 443 阅读 · 0 评论 -
面试经典150题【61-70】
根据preorder[0]去切开Inorder数组,并且得知数量后,再行切开preorder数组,最后迭代即可。新建两个链表,一个里面的值恒小于x,一个里面的值恒大于等于x,再合并两个链表即可。树这边还是用递归,先处理自己的逻辑,然后直接扔给左右子节点。BFS就是创建一个队列,一行一行遍历。看看能遍历几行罢了。直接先序遍历放到数组里,然后挨个取出来建立新树即可。第二步:找head, 第三步:断环。永远是最左边的和最右边的想比较,然后往里面靠近。树的问题最经典的就是DFS和BFS。树这里就是递归去做就行。原创 2024-03-08 16:43:54 · 410 阅读 · 0 评论 -
面试经典150题【51-60】
比如我在栈一塞入[ 1,2,3] ,那我在最小栈就塞入 [ 1,1,1] ,然后弹出的时候一起弹出就行。设置虚拟节点0,当有两个数相同的时候,cur.next.val == cur.next.next.val。最后,我们然后map.get(head),也就是对应的新链表的头节点,就可以解决此问题了。map.get(原节点.random),得到的就是对应的新节点.random。map.get(原节点.next),得到的就是对应的新节点.next。从上图中我们可以发现,原节点和新节点是一一对应的关系,所以。原创 2024-03-04 11:44:40 · 1037 阅读 · 0 评论 -
面试经典150题【41-50】
方法二:哈希表记录[k,v]—> [ nums[i],i] ,如果包含则比较与i的距离,大于k则将[nums[i],j] 赋值给[nums[i],i] ,继续遍历。然后再遍历一遍Set, 如果包含 nums[i]+1,依次遍历有没有nums[i] +2, nums[i] +3 等等。可以放到map里 [key,value] ->[ nums[i], 左右最长的长度]先按左区间排序,然后依次遍历,根据 nums[i+1][0] 和 nums[i][1] 判断是否需要合并。所有的这种二维数组的,都要先排序。原创 2024-02-28 18:58:50 · 897 阅读 · 0 评论 -
面试经典150题【31-40】
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。请使用 原地 算法。定义三个数组,int [][]row, row[i][j], i代表第几行,j代表出现的元素。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。然后用map.put(words[i],i) 与 map.put(s[i],i)判等就行。关键是找到公式: matrix[i][j] -> matrix[j][n-1-i]box[i][j], i代表第几个小格子,j代表出现的元素。原创 2024-02-26 16:54:05 · 990 阅读 · 1 评论 -
面试经典150题【11-20】
没意思,注意一下最后可能有空格,先写个while循环把空格排除掉就行。原创 2024-02-20 19:31:56 · 921 阅读 · 0 评论 -
面试经典150题【21-30】
若向内 移动长板 ,水槽的短板 min(h[i],h[j]) 不变或变小,因此下个水槽的面积 一定变小。若向内 移动短板 ,水槽的短板min(h[i],h[j]) 可能变大,因此下个水槽的面积 可能增大。正常的话要考虑两个东西,一个是找不到则答案输出为0,还有是因为是Min函数,要考虑ans的初始值。要不就是移动到已有的(在Pianyi数组中),要不就是全部移动(移动nSize+1)2.当前行不是最后一行,且只有一个单词:该单词左对齐,在行末填充空格;先定一个first,然后就是求两数之和,双指针。原创 2024-02-24 17:20:58 · 1045 阅读 · 0 评论 -
面试经典150题【1-10】
在每一天,你可以决定是否购买和/或出售股票。你也可以先购买,然后在 同一天 出售。1,4,7,3,6,2,5,1.是有顺序的,也可能是几个顺序环。然后倒转前k个,还有后面的几个。5,6,7,1,2,3,4即为答案。要注意他写的是,只左移动(right–)或只右移动(left++)或者定义一个大数组来计数,这个数组也不是很大,因为H指数最大就是n。如果右边扔进来的也是val,那么在下一次循环的时候还会再扔。length − 这是要复制的数组元素的数量。3.先全部倒转,7,6,5,4,3,2,1。原创 2024-02-17 23:26:04 · 1184 阅读 · 0 评论 -
剑指offer 21-30
无原创 2023-09-27 17:08:35 · 119 阅读 · 0 评论 -
剑指offer11-20
所有的dfs都是从每一个点开始,往所有方向遍历,dfs的参数列表还要传一个全局的数组去判断合不合适继续往下走。n&(n−1) 解析: 二进制数字 n 最右边的 1 变成 0 ,其余不变。肯定不是遍历一遍O(N),这种变相有序,也是二分。二分也不容易啊,要思考。先处理负数,然后要提前处理奇数。其实最后当b==1的时候也要处理奇数。或者直接调用Integer.bitCount(n)原创 2023-08-14 19:39:58 · 176 阅读 · 0 评论 -
剑指offer-3-10
剑指offer3-10原创 2023-08-03 12:39:23 · 127 阅读 · 0 评论 -
程序员面试题04
程序员面试金典 04刷题回忆录文章目录04.01节点间通路04.02最小高度树04.03特定深度节点链表04.04检查平衡性04.05合法BST04.06后继者04.08 首个公共祖先04.01节点间通路给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。04.01class Solution {public: bool findWhetherExistsPath(int n, vector<vector<int>>& graph, int st原创 2021-11-27 23:56:23 · 100 阅读 · 0 评论 -
程序员面试题03
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例原创 2021-09-06 17:14:39 · 138 阅读 · 0 评论 -
程序员面试题02
程序员面试金典 02 刷题回忆录文章目录02.01 移除重复节点02.02 返回倒数第k个节点02.03 删除中间节点02.04 分割链表02.05 链表求和02.06 回文链表02.07 链表相交02.08 环路检测02.01 移除重复节点用unordered_set查重即可02.02 返回倒数第k个节点快慢指针02.03 删除中间节点一般情况下要用多个指针,但是可以直接消灭后一个,也算删除。杀不掉我,我就变成你,然后再干掉你,就等于杀死了自己。class Solution {publ原创 2021-08-21 23:09:51 · 118 阅读 · 0 评论 -
程序员面试题01
程序员面试金典 01刷题回忆录文章目录01.01 判断字符是否唯一01.02 判断是否互为字符重排01.03 URL化01.04 回文排列01.05 一次编辑01.06 字符串压缩01.07 旋转矩阵01.08 零矩阵01.09 字符串轮转01.01 判断字符是否唯一实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = “leetcode”输出: false示例 2:输入: s = “abc”输出: true限制:0 <= len(s) <原创 2021-08-20 23:44:23 · 577 阅读 · 1 评论