算法
文章平均质量分 67
记录算法学习
StudyWinter
持续学习
展开
-
【算法】二叉搜索树的插入、删除、转换操作
对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。如果前一个节点小于当前节点,则将插入数据放到前一个节点的右子树上;二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。如果前一个节点大于当前节点,则将插入数据放到前一个节点的左子树上;另一个正确答案是 [5,2,6,null,4,null,7]。原创 2024-02-29 08:28:47 · 853 阅读 · 0 评论 -
【算法】洗牌算法
笔试时,遇到一个算法题:原创 2022-11-03 15:46:41 · 196 阅读 · 0 评论 -
【算法】求最小子集的和被5整除
【可以先预处理一波,所有数字先对5取余,得到的数字是在0-4范围内,然后再用5个桶,类似桶排序,把数字存起来,再进行判断(取余、存储我理解了,那么怎么和原数据进行对应的)】,我没有理解面试官后面的意思(苦笑),也没有顺着他的思路写出来。输入 S = {1,2,6,7,11, 12,13, 14, 17, 22}, 则输出 T = {1,14} 或 T = {2, 13}?我:我没有看面经,平时就刷题用用这些容器,使用时需要注意什么,使用时需要注意什么(我连说两遍),平时就是用,没注意到有什么。原创 2022-10-31 10:19:22 · 345 阅读 · 0 评论 -
Skip List--跳表(全网最详细的跳表文章没有之一)
跳表是可以实现二分查找的有序链表;每个元素插入时随机生成它的level;最底层包含所有的元素;如果一个元素出现在level(x),那么它肯定出现在x以下的level中;每个索引节点包含两个指针,一个向下,一个向右;(笔记目前看过的各种跳表源码实现包括Redis 的zset 都没有向下的指针,那怎么从二级索引跳到一级索引呢?留个悬念,看源码吧,文末有跳表实现源码)跳表查询、插入、删除的时间复杂度为O(log n),与平衡二叉树接近;转载 2022-10-27 17:04:27 · 641 阅读 · 2 评论 -
【算法】单调栈的题
记一次笔试题。原创 2022-10-25 15:34:17 · 181 阅读 · 0 评论 -
【算法】递增子序列
总结一下三道求子序列长度的题。原创 2022-09-18 10:09:45 · 438 阅读 · 0 评论 -
【算法】重载sort的cmp的题
在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。(3)有交集的气球,更新终止位置,注意是去右边界的较小者,等到下次再和下一个气球判断,无交集,射出一支箭;原创 2022-09-03 17:57:27 · 356 阅读 · 0 评论 -
【算法】删除链表中的节点
法一: 因为是排序的,所以相同的元素是连着的,因此只要当前节点curNode的val等于当前节点的下一个节点的val时,就把当前节点的下一个节点移除。法二:定义一个空节点为头节点(链表的操作经常需要这样做),定义两个指针,遍历链表,删除所有重复的元素,使每个元素只出现一次。给定一个已排序的链表的头。原创 2022-08-20 22:39:03 · 1224 阅读 · 0 评论 -
约瑟夫环问题
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。链表最适合解决删除节点问题,这里将链表成环,然后计数删除对应的节点。...原创 2022-08-18 15:38:29 · 161 阅读 · 3 评论 -
二叉搜索树的遍历
在处理二叉搜索树时,我们第一时间想到的是中序遍历得到有序数组,然后再根据需求处理,其实也可以在中序遍历时就处理。直接中序遍历生成数组,再判断数组是否有序即可。也可以直接在中序遍历时处理。......原创 2022-08-15 15:34:50 · 465 阅读 · 0 评论 -
【算法】买股票系列
leetcode上有【买股票】的题很有意思,基本上也采用动态规划去做,今天总结一下。在309. 最佳买卖股票时机含冷冻期解答中汇总了题目汇总了所有的买股票问题:力扣1、121 买股票的最佳时机链接:力扣给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润..原创 2022-05-04 18:57:14 · 1346 阅读 · 0 评论 -
【算法】打家劫舍系列
leetcode上有【打家劫舍】的题很有意思,基本上采用动态规划去做,今天总结一下。打家劫舍1198. 打家劫舍 - 力扣(LeetCode) (leetcode-cn.com)你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。例1输入:[1,原创 2022-04-30 19:19:26 · 1247 阅读 · 0 评论 -
【背包问题】爬楼梯
今天看到对爬楼梯问题有意思的解法力扣链接:力扣这道题和斐波那契数一样,都很经典。解法1常规的解法,写个递归,不过这个在力扣会超时,放上代码class Solution {public: int climbStairs(int n) { if (n <= 2) { return n; } return climbStairs(n - 1) + climbStairs(n - 2); }};原创 2022-04-21 09:29:24 · 1207 阅读 · 0 评论 -
【算法】背包问题
01背包:01背包就是只有拿或者不拿两种状态1、二维数组版#include <iostream>#include <vector>using namespace std;void test() { vector<int> weight = {1, 3, 4}; // 物品的容量 vector<int> value = {15, 20, 30}; // 物品的价值 int bagweight = 4;原创 2022-04-15 09:58:03 · 452 阅读 · 0 评论 -
【算法】回溯算法
回溯算法能解决如下问题:组合问题:N个数里面按一定规则找出k个数的集合 排列问题:N个数按一定规则全排列,有几种排列方式 切割问题:一个字符串按一定规则有几种切割方式 子集问题:一个N个数的集合里有多少符合条件的子集 棋盘问题:N皇后,解数独等等回溯算法总结:回溯法解决的问题都可以抽象为树形结构。因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。通式:void backtracking(参数) { if (终止条件) {原创 2021-11-22 09:53:27 · 947 阅读 · 0 评论 -
【算法】用栈实现队列和用队列实现栈
1、用栈实现队列详见leetcode:232. 用栈实现队列用两个栈实现队列的功能。一个栈(stIn)用来接受入队操作,另一个栈(stOut)用来处理出队操作。(1)入队操作:将数据加入到stIn中即可;(2)出队操作:当stOut为空的时候,将stIn里面的数据加入到stOut中。再从stOut中弹出数据,作为出队列的数据;(3)返回队头元素:调用出队操作,保存出队数据,再将数据存到stOut中(因为只是返回,而不出队),返回保存的数据;(4)判断为空:判断两个栈是否为空即可。原创 2021-09-26 21:03:56 · 241 阅读 · 0 评论 -
【算法】二分查找
二分查找涉及的很多的边界条件,逻辑比较简单,但就是写不好。例如到底是while(left < right)还是while(left <= right),到底是right = middle呢,还是要right = middle - 1呢?写二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。写二分法,区间的定义一般为两种,左闭...原创 2021-09-03 14:44:51 · 132 阅读 · 0 评论 -
【算法】背包问题
最近刷leetcode,遇到背包问题基本上都不会,找了个视频学习一下。b站链接:https://www.bilibili.com/video/BV1C7411K79w?from=search&seid=177239150113527064270/1背包问题给定n种物品和一个容量为C的背包,物品i的重量是wi,其价值为vi。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?问题分析:面对每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不.原创 2021-05-14 21:37:03 · 1228 阅读 · 0 评论