
秒杀系列:题型大乱炖,剑指offer!!!!
文章平均质量分 91
针对题型,面向工作的刷题记录,持续更新
____Dream
从来就没有什么救世主,也没有神仙皇帝
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法闭关修炼百题计划(八)
也可以通过左移变为“zab”等。因此,“abc”、“bcd”、“xyz”等字符串具有相同的“移位序列”。以window[c]>1为缩小窗口的条件,而不是长度大于k为缩小窗口的条件,因为如果以无重复为条件的话,当长度为k的时候,无重复的字符也自然为k,这样逻辑清晰简洁。输入:strings = [“abc”,“bcd”,“acef”,“xyz”,“az”,“ba”,“a”,“z”]输出:[[“acef”],[“a”,“z”],[“abc”,“bcd”,“xyz”],[“az”,“ba”]]原创 2024-11-14 15:41:35 · 955 阅读 · 0 评论 -
算法闭关修炼百题计划(七)
在这个问题中,深拷贝的知识点是指创建一个完全独立的复制链表,其中每个节点都是原链表中节点的独立副本。具体来说,原链表中的每个节点不仅要复制他的值和next指针,还要复制他的random指针(指向链表中的任意节点或空指针)。这个方法的核心是将链表的节点复制一份并插入到原链表中,然后调整随机指针,最后将原链表和复制的链表分离。findMedian()如果两个堆的大小相等,返回两个堆顶元素的平均值,如果堆的大小不等,直接返回大根堆的堆顶元素,因为它代表了数据流的中位数。中位数是有序整数列表中的中间值。原创 2024-11-13 20:06:10 · 950 阅读 · 0 评论 -
算法闭关修炼百题计划(六)
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。search和startswith的区别就是search必须是一个字符串结尾的,也就是要有结尾标记,而startswith可以没有。一个有序数组对于 BST 来说就是中序遍历结果,根节点在数组中心,数组左侧是左子树元素,右侧是右子树元素。前缀和的技巧用到树上来,用preSumCount来记录路径和,以及该路径和出现的次数。遍历图结构,就可以判断环了。给行数,实现杨辉三角。原创 2024-10-28 10:24:03 · 1241 阅读 · 0 评论 -
算法闭关修炼百题计划(五)
现在你需要从两个不同的数组中选择两个整数(每个数组选一个)并且计算它们的距离。一开始用第一个元素sort了,这样反而会出错,因为一个元素的数组可能是其他数组的中间值,这种情况他应该和左右两端都比较才对。所以注意sn == tn的情况,return的是flag,因为如果是true的话,flag一定是变化过一次的!现以某种顺序 连接 数组 nums 中所有元素的 二进制表示 ,请你返回可以由这种方法形成的 最大 数值。输入:s = “abc”, shift = [[0,1],[1,2]]原创 2024-10-23 10:33:32 · 675 阅读 · 0 评论 -
【贪心算法】刷刷刷刷刷刷题(下)
在计算是否有峰值的时候,大家知道遍历的下标 i ,计算 prediff(nums[i] - nums[i-1]) 和 curdiff(nums[i+1] - nums[i]),如果prediff < 0 && curdiff > 0 或者 prediff > 0 && curdiff < 0 此时就有波动就需要统计。因为我们在计算 prediff(nums[i] - nums[i-1]) 和 curdiff(nums[i+1] - nums[i])的时候,至少需要三个数字才能计算,而数组只有两个数字。原创 2024-10-23 01:16:17 · 1098 阅读 · 0 评论 -
【贪心算法】刷刷刷刷刷刷题(上)
定义cover为每次能跳的步长,跳完当前步长和,步跳完当前步长后能跳的步长,做对比,取最大的!cover可能会大于数组长度,所以要及时return!!原创 2024-10-22 23:41:03 · 1241 阅读 · 0 评论 -
【公共祖先】二叉树专题
公共祖先这一类题目,难度不大,但是非常实用,也是面试问到概率比较大的一类题目。为什么实用呢?主要在Git领域:git pull这个命令默认是使用merge方式将远端别人的修改拉倒本地,如果带上参数,git pull -r,就会使用rebase的方式将远端修改拉倒本地。这二者最直观的区别就是:merge 方式合并的分支会看到很多「分叉」,而 rebase 方式合并的分支就是一条直线。但无论哪种方式,如果存在冲突,Git 都会检测出来并让你手动解决冲突。原创 2024-10-09 19:32:01 · 1724 阅读 · 0 评论 -
【旋转数组】二分法专题
以上两道题我小总结一下,有无重复元素影响的是=加不加,其实第一题也可以加,在无重复元素的时候,开区间加不加其实没所谓,但是当有重复元素的时候,考虑这个很重要我在刚开始学习二分法的时候,背诵的模板的不加等号的if,改的是left,其实我如果照着这个模板写这两道题,就不会错,但是我鬼使神差把不加等号那边改right了,导致一直不过那么可以总结一个有无重复元素通用的模板public:= right){原创 2024-10-08 19:49:25 · 1404 阅读 · 0 评论 -
codetop标签双指针题目大全解析(四),双指针刷穿地心!!!!!
寻找新的表尾:成环右移k个,说明链表倒数第k个会变成表头,for (int i = 0;close是当前的三个元素,closeNum是最接近的,初始化为nums[0] + nums[1] + nums[2]二刷debug:换了一个写法,用快慢指针做,需要注意的是快指针停下来的地方不应该是null,而是head。这个return的是和,重复不重复只是降低复杂度,不会改变答案,不用像三数之和一样死扣不重复。非0元素前移,这和秒杀双指针里面的移除特定元素是一样的。这题题目给的k一定是合理的!原创 2024-10-08 14:02:25 · 430 阅读 · 0 评论 -
codetop标签双指针题目大全解析(三),双指针刷穿地心!!!!!
要注意不需要window.size() == need,也要计算len,因为有while(window.size() > need)在,窗口不是小了就是刚刚好,不可能大,如果fruit的水果树种类本来就不足2个,就可以返回。这里有个十分关键的点,就是:原本的数组本身就是有序的,是一个非递减的数组,那么即使数组中元素有正有负,绝对值最大的元素肯定是在数组的两端的,即数组平方的最大值是在数组的两端的。(我只是来做双指针的…输入:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2。原创 2024-10-08 14:00:11 · 799 阅读 · 0 评论 -
codetop标签双指针题目大全解析(二),双指针刷穿地心!!!!!
如果 a 的长度大于 b 的长度,则返回 true,意味着 a 应该排在 b 前面。先将前缀和prefix[j]存入哈希表,在求prefix[j] - k,看他在不在哈希表,如果在的话,说明存在一个prefix[i - 1]使prefix[j] - prefix[i - 1] = k。这题考滑动窗口,但是考的很隐蔽,题目说只能移除nums最左边和最右边的元素,目标值是x,可以反着来,目标区间是中间的区域,目标值是sum - x。for的话因为right会晚一步+1,所以窗口长度是right-left+1。原创 2024-10-08 13:58:08 · 1043 阅读 · 0 评论 -
算法闭关修炼百题计划(四)
给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量。用map而不是unordered_map,因为键值对在map中是有序的,即元素按照键的升序排列。给你两个 非空 的链表,表示两个非负的整数。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。原创 2024-10-07 01:48:41 · 1388 阅读 · 0 评论 -
codetop标签树刷题(四)!!暴打面试官!!!!
用于个人复习原创 2024-10-06 13:21:26 · 686 阅读 · 0 评论 -
codetop标签树刷题(三)!!暴打面试官!!!!
用于个人复习原创 2024-10-06 13:18:58 · 1093 阅读 · 0 评论 -
codetop标签树刷题(二)!!暴打面试官!!!!
一篇10题原创 2024-10-06 13:17:02 · 761 阅读 · 0 评论 -
codetop标签动态规划大全C++讲解(四)!!动态规划刷穿地心!!学吐了家人们o(╥﹏╥)o
如果设置 dp[i] 的意义是指以下标 i 结尾的字符串有 dp[i] 个回文串,那就会很难想,因为dp[i] 和 dp[i-1] ,dp[i + 1] 看上去都没啥关系。s[i] == s[j],j - i <= 1,是回文串(a或aa的情况),如果 i 和 j 差距大于1,就撤回一步看dp[i + 1][j - 1]是不是回文子串。= s[j]时,加入s[j]的回文子序列长度为dp[i + 1][j]。在s[i] == s[j]时,dp[i][j] = dp[i + 1][j - 1] + 2。原创 2024-10-06 13:09:19 · 742 阅读 · 0 评论 -
codetop标签动态规划大全C++讲解(三)!!动态规划刷穿地心!!学吐了家人们o(╥﹏╥)o
注意:只能买一次,状态不能从dp[i-1][1]转移,所以只有-prices[i],如果不限次数就可以写dp[i - 1][1] - prices[i]了!dp[i][j]表示以下标i-1结尾的字符串word1,和以下标j-1结尾的字符串word2,最近编辑距离为dp[i][j],所以i,j最大都可以达到len。dp[i][j]:以i-1为结尾的字符串word1,和以j-1为结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。可以从第 i - 1 行第 j 或第 j - 1 个元素下落过来。原创 2024-10-06 13:06:45 · 1150 阅读 · 0 评论 -
codetop标签动态规划大全C++讲解(二)!!动态规划刷穿地心!!学吐了家人们o(╥﹏╥)o
每一回合,玩家从数组的任意一端取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减 1 )。偶数的二进制1个数超级简单,因为偶数相当于是被更小的某个数乘2,这个乘2在二进制中的体现就是整体左移,比如数字1的二进制是1,左移是10,就是2。所以dp[3] = dp[2] * dp[0] + dp[1] * dp[1] + dp[0] * dp[2]如果i到了s的末尾,j没有到p的末尾,这时候就要考虑p剩余的元素能否匹配空字符串。原创 2024-10-06 13:05:20 · 1174 阅读 · 0 评论 -
算法闭关修炼百题计划(三)
什么时候缩小窗口:因为当窗口中某个字符的数量 超过 tar 时,就意味着在剩余的字符串中,该字符的数量将 少于 k,这不符合题目要求。在快排中,每次经过划分后,一定可以确定一个元素的最终位置,即x的最终位置是q,并且a[l…滑动窗口内的数字,和tar里面留的数字比较,滑动窗口的数字小于tar中的,说明两侧这个字母的数量>k,滑动窗口的数字大于tar中的,说明两侧这个字母小于k。每次循环看下一个节点和下下节点的值是不是一样的,如果是一样的,就嵌套一个while,不一样,cur就移动。原创 2024-10-06 13:01:25 · 1160 阅读 · 0 评论 -
算法闭关修炼百题计划(二)
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。根据这一点,用哈希表分组,把排序后的字符串当做key,原字符串组成的列表即答案当做value,最后把所有value加到一个列表中返回。假如将aab,aba按照从小到大排序,可以得到同一个字符串aab,所以当且仅当两个字符串排序后一样,才把他俩分到一组。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。请使用 原地 算法。原创 2024-10-05 13:24:49 · 1163 阅读 · 0 评论 -
算法闭关修炼百题计划(一)
如果要添加pattern[0]到字符串中,那么肯定要将pattern[0]添加到字符串开头,这样后面每个pattern[1]都可以和开头新增的这个pattern[0]组成pattern,答案数量增加cnt1(有多少个pattern[1]就能多组成多少个pattern);q - 1]中的每个元素小于等于a[q],且a[q]小于等于a[q + 1…滑动窗口内的数字,和tar里面留的数字比较,滑动窗口的数字小于tar中的,说明两侧这个字母的数量>k,滑动窗口的数字大于tar中的,说明两侧这个字母小于k。原创 2024-09-29 19:36:52 · 1227 阅读 · 0 评论 -
codetop字符串刷题,刷穿地心!!不再畏惧!!暴打面试官!!
4和9的特例用算法逻辑解决了,以IX为例,遍历到I的时候,发现 I 为 1,小于后续的 X 值为 10,所以执行减法,接下来遍历至X没有发现后续字符,或者X大于等于任何可能的后序字符,所以加上 X 的值。若“压缩”后的字符串没有变短,则返回原先的字符串。如果遇到的是),那么左括号最小的情况,是要-1,抵消一个,最大的情况,也要-1,因为不管怎么样,)始终是要抵消掉一个左括号的,即便是*当作左括号的情况。输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]原创 2024-09-19 20:09:30 · 1033 阅读 · 0 评论 -
codetop哈希表刷题!!!刷穿地心版)
使用异或^来解决,将字母和数字进行异或操作是常见的,尤其是在执行简单的加密或编码任务时。根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且 至少 有 h 篇论文被引用次数大于等于 h。首先,排序,h逐步加大,不用管加大之后,前面遍历的cite还合不合法,因为是从大到小排序的,如果后面遍历到的数字都满足>h,那么前面的一定大于h。底层用数组实现,元素的排列必须紧凑,另外,删除元素的时候,用尾部元素与其交换,删除尾部元素,利用pop。原创 2024-09-19 20:06:19 · 798 阅读 · 0 评论 -
codetop标签动态规划大全C++讲解(一)!!动态规划刷穿地心!!学吐了家人们o(╥﹏╥)o
主要供自己回顾学习,会持续更新,题源codetop动态规划+近半年1.零钱兑换2.零钱兑换II3.面试题08.11.硬币4.单词拆分5.最长递增子序列6.最长递增子序列的个数7.得到山形数组的最少删除次数8.最长公共子序列9.最长重复子数组10.最长等差数列11.最大子数组和12.最长的斐波那契子序列的长度13.最大正方形14.最长有效括号15.乘积最大子数组16.可被三整除的最大和17.回文子串数目18.最长回文子序列19.最长回文子串20.买卖股票的最佳时机21.买卖股票的最佳时机含手续费22.买卖股票原创 2024-08-26 22:26:51 · 1048 阅读 · 0 评论 -
codetop标签树刷题(一)!!暴打面试官!!!!
个人复习原创 2024-08-23 01:45:56 · 964 阅读 · 0 评论 -
codetop标签双指针题目大全解析(一),双指针刷穿地心!!!!!
这里有个十分关键的点,就是:原本的数组本身就是有序的,是一个非递减的数组,那么即使数组中元素有正有负,绝对值最大的元素肯定是在数组的两端的,即数组平方的最大值是在数组的两端的。假如nums1中才是数字出现少的那个,那么umap[nums1]会先到0,以至于res不了nums2的元素,假如nums2才是数字出现少的那个,那么if(nums2)会先空。这题考滑动窗口,但是考的很隐蔽,题目说只能移除nums最左边和最右边的元素,目标值是x,可以反着来,目标区间是中间的区域,目标值是sum - x。原创 2024-08-05 21:54:24 · 1113 阅读 · 0 评论