算法
文章平均质量分 68
风起时~微凉
面朝大海,静等春暖花开……
展开
-
十大经典排序算法
稳定排序:冒泡排序、插入排序、归并排序非稳定排序:选择排序、希尔排序、堆排序、快速排序1、冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调,比较是相邻的两个元素比较,交换也发生在这两个元素之间。(类似于气泡上浮过程)动图如下:步骤:1、比较相邻的元素,如果第一个比第二个大,则交换2、对每对相邻元素重复步骤1操作,筛选出最大元素3、针对所有元素重复步骤1、2(除最后一个元素,已经是最大)示例代码:void bubbleSort(std::vec..原创 2021-10-21 11:40:12 · 31116 阅读 · 21 评论 -
二叉搜索树(BST)合集
目录一、BST定义和性质二、二叉搜索树中第K小的元素三、把二叉搜索树转换为累加树四、合法二叉搜索树五、二叉搜索树中的搜索六、二叉搜索树中的插入操作七、在 BST 中删除一个数八、不同的二叉搜索树九、不同的二叉搜索树 II一、BST定义和性质定义:BST是一棵空树,或者具有以下性质的二叉树:性质:若它的左子树不空,则左子树的所有节点值都小于根节点的值 若它的右子树不空,则右子树的所有节点值都大于根节点的值 左子树和右子树都是二叉搜索树备注:BST中序.原创 2021-12-10 16:53:11 · 941 阅读 · 0 评论 -
一文搞懂背包问题
目录一、背包定义二、背包分类三、背包解题模板1、分类解题模板2、背包分类模板3、问题分类模板四、背包相关例题1、经典0-1背包2、分割等和子集3、零钱兑换 II4、零钱兑换5、最后一块石头的重量 II6、目标和7、完全平方数8、组合总和 Ⅳ9、掷骰子的N种方法一、背包定义背包定义:给定一个背包重量target,再给定一个数组nums(物品),按照一定方式选取nums中物品,得到target。备注:nums中物品可能是数,也可能是原创 2021-12-10 13:43:02 · 816 阅读 · 0 评论 -
剑指offer刷题笔记(C++版本)
目录一、位运算1、二进制中1的个数二、数组1、数组中重复的数字2、二维数组的查找3、数字在排序数组中出现的次数4、旋转数组的最小数字5、调整数组顺序使奇数位于偶数前面6、顺指针打印矩阵7、数组中出现次数超过一半的数字8、连续子数组的最大和9、数组中的逆数对10、数组中只出现过一次的数字11、把数组排成最小的数12、构建乘积数组三、链表1、从尾到头打印链表2、链表中倒数第K个节点3、反转链表4、合并两个排序链表5、两个链表的第原创 2021-11-17 16:35:53 · 843 阅读 · 2 评论 -
常用算法框架
1、数据结构的存储方式底层只有两种:数组(顺序存储)和链表(链式存储)二者区别:数组:连续存储,可以随机访问,通过索引可以快速找到对应元素,而且相对节约存储时间。正因为连续存储,必须一次性分配内存空间,扩容需要重新分配更大空间,把数据复制过去,从中间插入和删除必须移动后面的数据链表:元素不连续,靠指针指向下一个元素位置。知道某一个节点的前驱和后驱就可以对该指针删除或者插入新元素。由于不连续,无法通过索引找到对应元素,不能随机访问,每个元素保存前后元素位置的指针,增加存储空间2、数据结构的基本原创 2021-11-10 19:08:38 · 3861 阅读 · 0 评论 -
用 Rand7() 实现 Rand10()
题目:已有方法rand7可生成 1 到 7 范围内的均匀随机整数,试写一个方法rand10生成 1 到 10 范围内的均匀随机整数。不要使用系统的Math.random()方法。示例1:输入: 1输出: [7]示例 2:输入: 2输出: [8,4]示例 3:输入: 3输出: [8,1,10]提示:rand7已定义。传入参数:n表示rand10的调用次数。LeetCode链接:https://leetcode-cn.com/probl...原创 2021-10-27 10:19:48 · 3141 阅读 · 0 评论 -
重排链表
题目:给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0→ L1→ … → Ln-1→ Ln请将其重新排列后变为:L0→Ln→L1→Ln-1→L2→Ln-2→ …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入: head = [1,2,3,4]输出: [1,4,2,3]示例 2:输入: head = [1,2,3,4,5]输出: [1,5,2,4,3]LeetCode;链接:https...原创 2021-10-26 19:32:45 · 510 阅读 · 0 评论 -
图解奇偶链表
题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。输入:1->2->3->4->5->6->7输出:1->3->5->7->2->4->6LeetCode链接:https://leetcode-cn.com/p原创 2021-10-26 15:23:19 · 519 阅读 · 0 评论 -
LRU缓存
题目:设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之原创 2021-10-25 17:44:15 · 353 阅读 · 0 评论 -
单链表反转(四种方式实现)
题目:输入一个单链表,反转该链表并输出输入:1->2->3->4->5输出:5->4->3->2->1代码示例://就地反转ListNode * reverse1(ListNode *node){ if (node == nullptr) { return node; } ListNode *head = new ListNode(-1); head->next =原创 2021-10-22 16:53:53 · 1434 阅读 · 0 评论