
算法
文章平均质量分 83
AiryView
等待雪融的你
展开
-
滑动窗口题目总结(持续更新中)
给定一个字符串,维护一个窗口,满足窗口内的字符不重复,输出窗口的最长长度。注意的是本题窗口右侧(又名右区间)每次移动一位,而对于窗口左侧(左区间),当右区间碰到重复字符时,将左区间移动到该重复字符上一次出现的索引位置的下一位来保证窗口中字符不重复。给定一个字符串,维护一个窗口,满足如果窗口长度-最高频字符数量不大于k,输出满足要求的窗口的最长长度。注意的是本题窗口右侧每次移动一位,而对于窗口左侧(左区间),当窗口长度-最高频字符数量大于k,那么就需要移动一位。这题和不能说很像,只能说一模一样。原创 2023-11-17 19:57:32 · 440 阅读 · 0 评论 -
二分查找常见需求(持续更新中)
当然如果不存在就返回tmp.length。①首先为什么用l原创 2023-11-07 14:44:44 · 317 阅读 · 0 评论 -
动态规划总结(持续更新中……)
dp[i][j]表示第i个字符到第j个字符组成的子字符串是否是回文串(这里i,j都是从1开始的)(n是字符串长度)通常我们定义都是n+1空间,这里定义n+2,是因为后面区间内dp文件中,右区间刚好为n了,但是需要划分n-1和n+1两部分,如果不定义为n+2,那么n+1这部分作为索引就会越界。dp[i][j]表示从第i到第j区间的数确保能获胜的最小金额(不管选哪个数字),自然最后结果是返回dp[1][n]了dp[i]表示前i个字符组成的字符串的解码方式数(n是字符串长度)原创 2023-09-12 14:47:24 · 511 阅读 · 0 评论 -
教你做回溯题(Leetcode电话号码的字母组合、括号生成和单词搜索)-第四期
前三期指路:第一期第二期第三期这次应该是最后一期了,前几次的题目比较常规,基本是什么子集或者排列什么的书面语言,这期就总结一些比较偏向应用类的题目,当然其实本质还是那一套。例题电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有能表示的字母组合,其中这个数字与字母的映射关系如下(就是我们手机键盘):定义一个映射向量方便操作vector<string> mapping{"abc","def","ghi","jkl","mno","pqrs","t.原创 2021-08-29 14:44:57 · 194 阅读 · 0 评论 -
教你做回溯题(Leetcode全排列和全排列II)-第三期
前两期指路:第一期:第一期第二期:第二期例题全排列给定一个不含重复数字的数组,返回所有可能的全排列,对于组合集合来说,要考虑顺序①选择一个实例[1,2,3]画图②确定结束条件由于是全排列,所以最后结果的集合一定包含多有的数,那么结束条件是path的长度与题目给的nums一样//结束条件if(path.size()==nums.size()){ res.push_back(path);}③确定选择列表,我们发现这题选择列表相对于前几期没那么有规律。.原创 2021-08-28 16:30:58 · 249 阅读 · 0 评论 -
教你做回溯题(Leetcode组合总数和组合总数II)-第二期
定义什么的就不多说了,上期都有,还有这期涉及到上期的知识,最好结合上期看。上期指路:递归回溯题目总结(第一期)例题组合总和给定一个无重复元素的正整数数组和一个目标正整数,找出数组中所有可以使数字和为目标正整数的组合(数组中的一个数可以被重复使用)①选择一个实例[2,3,5]与8画图这个图没有画完,但是基本清楚大致,流程。②确定结束条件定义一个sum,记录一次深入递归遍历的和,如果等于目标数,则结束,加入结果集。//条件判断if(sum==target){ .原创 2021-08-27 17:04:11 · 196 阅读 · 0 评论 -
教你做回溯题(Leetcode子集和子集 II)-第一期
什么时候需要用到回溯,为什么回溯和递归有关?在了解回溯之前,我们需要了解dfs,dfs就是深度优先遍历,简单来说,dfs就是一口气往往某个深度方向搜索,而回溯是建立在dfs的基础之上的,在搜索时,达到结束条件后,需要回复之前改变的状态,再次搜索,就是说比dfs多了一个状态重置...原创 2021-08-27 15:55:40 · 372 阅读 · 0 评论 -
浅谈推荐系统(一)
实际生活小例子我们平常去商店买瓶水,我们比较熟悉之后知道在哪个货架,一下子就能找到。我们想买手机的时候,去某宝或者并夕夕搜索华为xx然后选择合适的购买。但这有一个前提,都建立在客户有明确需求的情况下。另外一个因素是当今时代“信息过载”,可能一个便利店的商品不多,你逛几次就熟悉得差不多了,但是中百仓储那么多货品,对我这种路盲来说,不迷路就算成功。即使某宝和并夕夕的搜索引擎很强大速度也快,但是偌多的商品却只是让用户去主动搜索购买,未免对用户的主动性有太多要求;搜索引擎也表示.原创 2021-12-17 16:25:02 · 860 阅读 · 0 评论 -
剑指Offer(第二版)-思路简述-第二期(中等难度)
本文章旨在用较少且通俗的话说明这些题的做题思路(题目链接直接点击各题目标题即可)。只有思路,不放代码,主要是方便以后的复习和二刷、三刷。以思路为主,答案次之。读者如果想避免边看答案边做的方式,以思路为起点动手学习,这也是个不错的学习资源。中等难度1.二维数组中的查找使用双指针,定义l=0,r=n-1,也就是说从矩阵的右上角开始,如果当前位置值大于目标值,就左移即--r,如果小于目标值,就下移,即++l。直到找到为止。2.矩阵中的路径经典的回溯题。①选择一个实例画图,略。②确定结束原创 2021-12-07 13:30:01 · 499 阅读 · 0 评论 -
保研/面试复习-数据结构与算法-万字总结(近三万字)
算法复习1.最短路径Dijkstra经典的单源最短路径算法算法思想采用了一种贪心的策略。 声明一个数组dis来保存源点到各个顶点的最短距离和一个保存已经找到了最短路径的顶点集合T。 初始时,源点到源点为0,多以dist[s]=0。对于s存在能直接到达的边(s,m),则dis[m]=w(s,m),同时吧所有其他的s不能直接到达的点的dis设为正无穷。初始时,集合T中只有顶点s。 然后从dist中选择最小值,则该值就是s到该值对应点的最短路径,并把该点放入集合T中。原创 2021-09-30 15:49:37 · 6139 阅读 · 1 评论 -
剑指Offer(第二版)-思路简述-第一期(简单难度)
简单难度1.用两个栈实现队列定义两个栈,一个大栈,一个小栈,入队列的数直接放入小栈,然后出队的数直接从大栈弹栈,如果大栈为空,就把小栈中所有元素出栈并入栈到大栈中然后大栈弹栈。2.斐波那契数列这题比较简单,递归或者动态规划,推荐动态规划,不容易出错且运行更快。f[i]=f[i-1]+f[i-2]3.数组中重复的数字使用unordered_map记录数字出现次数,次数大于1即是结果。4.青蛙跳台阶问题动态规划,设置dp[i]为跳上i级台阶的跳法,由于只有跳一步或者两步的方式,所原创 2021-10-31 10:54:27 · 250 阅读 · 0 评论 -
LeetCode-腾讯精选练习 50 题-思路简述
本文章旨在用较少且通俗的话说明这50道题的做题思路。只有思路,不放代码,主要是方便以后的复习和二刷、三刷。以思路为主,答案次之。(部分难以用文字理解的题会画图)。简单难度中等难度困难难度...原创 2021-10-20 21:57:13 · 911 阅读 · 0 评论