
Algorithm
文章平均质量分 77
争取做算法与架构两条腿走路的U极客
Erice_s
试图用计算机的思维去探索纷繁的世界,大道至简
展开
-
LeetCode86: 分隔链表
leetcode86原创 2020-12-15 10:24:03 · 156 阅读 · 0 评论 -
LeetCode1115: 交替打印FooBar
leetcode原创 2020-12-14 20:54:59 · 196 阅读 · 0 评论 -
LeetCode106. 从中序与后序遍历序列构造二叉树
构造二叉树原创 2020-09-28 20:30:10 · 185 阅读 · 0 评论 -
LeetCode501. 二叉搜索树中的众数
BST遍历原创 2020-09-24 20:47:52 · 197 阅读 · 0 评论 -
LRU算法
LRU算法原创 2020-09-10 01:37:45 · 646 阅读 · 0 评论 -
快速选择算法
快速选择算法原创 2020-07-22 00:11:01 · 174 阅读 · 0 评论 -
快速排序
quick sort原创 2020-07-21 00:19:19 · 143 阅读 · 0 评论 -
剑指Offer: 滑动窗口的最大值
剑指Offer: 滑动窗口的最大值单调队列原创 2020-05-29 00:34:11 · 159 阅读 · 1 评论 -
马走日_最小步数
马走日_最小步数样例例如:输入1 1 3 1,输出为2。(其中,1 1为起始位置,3 1为目标位置) 算法 BFS原创 2020-05-10 23:48:12 · 3174 阅读 · 0 评论 -
C语言实现双向链表
C语言实现双向链表文章目录C语言实现双向链表1. 抽象数据类型定义2. API设计3. 接口实现3.1 节点元素创建3.2 链表创建/销毁3.3 插入元素3.4 删除元素3.5 迭代器创建/销毁3.6 查找元素4. 测试1. 抽象数据类型定义定义链表节点结构,链表结构,链表迭代器结构,链表迭代器方向枚举/* * list_t node struct. */typedef struc...原创 2020-04-22 23:44:39 · 338 阅读 · 0 评论 -
KMP算法
KMP算法题目描述给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。样例输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行输入字符串S。输出格式共一行,输出所有出现位置的起始下标(下标从0开始...原创 2020-04-21 00:08:36 · 295 阅读 · 0 评论 -
LeetCode102. 二叉树的层序遍历
LeetCode102. 二叉树的层序遍历题目描述102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)样例二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]...原创 2020-04-09 00:14:00 · 348 阅读 · 0 评论 -
剑指Offer: 剪绳子
剑指Offer: 剪绳子题目描述给你一根长度为 n 绳子,请把绳子剪成 m 段(m、n 都是整数,2 ≤ n ≤ 58 并且 m ≥ 2)每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]k[1] … k[m] 可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18样例输入:8输出:18算法 贪心N = m...原创 2020-04-06 23:11:09 · 380 阅读 · 0 评论 -
剑指Offer: 和为S的连续正数序列
剑指Offer: 和为S的连续正数序列题目描述输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。样例输入:15输出:[[1,2,3,4,5],[4,5,6],[7,8]]算法 双指针设置两个指针 i 和 j ,分别指向连续正数序列的起始和终止用S...原创 2020-04-01 00:29:33 · 199 阅读 · 0 评论 -
剑指Offer: 把数组排成最小的数
剑指Offer: 把数组排成最小的数题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组[3, 32, 321],则打印出这3个数字能排成的最小数字321323。样例输入:[3, 32, 321]输出:321323注意:输出数字的格式为字符串。算法仿函数自定义排序方式,a+b 要小于 b+a的字符串输出结果,如数...原创 2020-03-28 23:10:16 · 167 阅读 · 0 评论 -
剑指Offer: 链表中环的入口结点
剑指Offer: 链表中环的入口结点题目描述给定一个链表,若其中包含环,则输出环的入口节点。若其中不包含环,则输出null。算法 快慢指针扫描本题的做法比较巧妙,参考网上别人的写法用两个指针 first,second分别从起点开始走,first 每次走一步,second 每次走两步。如果过程中 second走到null,则说明不存在环。否则当 first 和 second 相遇后,...原创 2020-03-28 00:14:51 · 160 阅读 · 0 评论 -
剑指Offer: 删除链表中重复的节点
剑指Offer: 删除链表中重复的节点文章目录剑指Offer: 删除链表中重复的节点题目描述样例1样例2算法1 哈希表时空分析C++ 代码算法2 线性扫描时空分析C++ 代码题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。样例1输入:1->2->3->3->4->4->5输出:1->2->5样...原创 2020-03-28 00:08:57 · 435 阅读 · 0 评论 -
剑指Offer: 数字在排序数组中出现的次数
剑指Offer: 数字在排序数组中出现的次数题目描述统计一个数字在排序数组中出现的次数。例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。样例输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3输出:4算法1 STL容器先把数组元素放入multiset中 然后统计k出现的个数时间复杂度: 建立s...原创 2020-03-27 22:34:56 · 189 阅读 · 0 评论 -
剑指Offer: 两个链表的第一个公共结点
剑指Offer: 两个链表的第一个公共结点题目描述输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。样例给出两个链表如下所示:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: ...原创 2020-03-26 23:47:48 · 128 阅读 · 0 评论 -
剑指Offer: 复杂链表的复制
剑指Offer: 复杂链表的复制题目描述请实现一个函数可以复制一个复杂链表。在复杂链表中,每个结点除了有一个指针指向下一个结点外,还有一个额外的指针指向链表中的任意结点或者null。注意:函数结束后原链表要与输入时保持一致。算法 暴力求解双重for循环的主要目的是查找random节点的位置分为两步实现:根据next指针新建链表双重for循环,每次查找到一个random...原创 2020-03-20 00:27:51 · 170 阅读 · 0 评论 -
剑指Offer: 二叉树的深度
剑指Offer: 二叉树的深度题目描述输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。样例输入:二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示: 8 / \ 12 2 / \ 6 4输出:...原创 2020-03-19 23:02:03 · 119 阅读 · 0 评论 -
剑指Offer: 二叉搜索树的第K个节点
剑指Offer: 二叉搜索树的第K个节点题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。样例例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4 算法 递归由于题目给定的是二叉搜索树,右子树小于根节点,左子树大于根节点。中序遍历就是从小到大的有序排列时空分析时间复杂度: 树的节点中序遍历一遍,时间复杂度 O(n)空间复杂度: 开辟了...原创 2020-03-19 00:21:54 · 157 阅读 · 0 评论 -
剑指Offer: 二叉树中和为某一值的路径
剑指Offer: 二叉树中和为某一值的路径题目描述输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。。给出二叉树如下所示,并给出num=22。 5 / \ 4 6 / / \ 12 13 6 / \ / \9 1 5 1输出:[[...原创 2020-03-18 21:01:42 · 166 阅读 · 0 评论 -
洛谷P1305: 新二叉树
洛谷P1305: 新二叉树题目描述输入一串二叉树,输出其前序遍历样例第一行为二叉树的节点数 n(1≤n≤26)后面n行,每一个字母为节点,后两个字母分别为其左右儿子。 空节点用 * 表示输出格式: 二叉树的前序遍历 输入 6abcbdicj*d**i**j**输出 abdicj算法 递归使用左右指针建树建立树的根节点创建左右节点查...原创 2020-03-17 00:06:49 · 632 阅读 · 0 评论 -
剑指Offer: 二叉搜索树的后序遍历序列
剑指Offer: 二叉搜索树的后序遍历序列题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。注意:空树也是完全二叉树样例输入:[4, 8, 6, 12, 16, 14, 10]输出:true算法 递归根据二叉搜索树的特点: 左子树关键字的值严格小于根节点数值,右子...原创 2020-03-15 15:55:16 · 160 阅读 · 3 评论 -
剑指Offer: 重建二叉树
剑指Offer: 重建二叉树题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。注意:二叉树中每个节点的值都互不相同;输入的前序遍历和中序遍历一定合法;样例给定:前序遍历是:[3, 9, ...原创 2020-03-15 00:55:24 · 283 阅读 · 0 评论 -
剑指Offer: 最小的k个数
剑指Offer: 最小的k个数文章目录剑指Offer: 最小的k个数题目描述样例算法1 排序取k个最小值时空分析C++ 代码算法2 快速选择时空分析C++代码算法3 堆排序时空分析C++ 代码题目描述输入n个整数,找出其中最小的k个数注意:数据保证k一定小于等于输入数组的长度;输出数组内元素请按从小到大顺序排序;样例输入:[1,2,3,4,5,6,7,8] , k=4输出:[...原创 2020-03-13 00:14:44 · 217 阅读 · 0 评论 -
剑指Offer: 和为S的两个数
剑指Offer: 和为S的两个数题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的样例对应每个测试案例,输出两个数,小的先输出算法1 遍历由于数组是递增排列的,两个数值相隔越大, 乘积越小,所以只需要找出一次满足条件的一个偶对即可。时空分析时间复杂度分析:遍历一遍数组 O(n) , 每次find...原创 2020-03-12 00:30:18 · 125 阅读 · 0 评论 -
剑指Offer: 字符串的排列
剑指Offer: 字符串的排列题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。样例输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。输入:aab输出: aab, aba, baa算法 动态规划 + 回溯由于有重复元...原创 2020-03-12 00:16:40 · 280 阅读 · 0 评论 -
剑指Offer: 顺时针打印矩阵
剑指Offer: 顺时针打印矩阵题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。样例输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]算法 模拟我们顺时针定义四个方向:上右下左。从左上角开始遍历,先往右走,走到不能走为止,然后更改到下个...原创 2020-03-09 23:46:28 · 156 阅读 · 0 评论 -
剑指Offer: 栈的压入弹出序列
剑指Offer: 栈的压入弹出序列题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。注意:若两个序列长度不等则视为并不是一个栈的压入、弹出序列。若两个序列都为空,则...原创 2020-03-09 23:35:57 · 140 阅读 · 0 评论 -
剑指Offer: 二叉树的镜像
剑指Offer: 二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。样例输入树: 8 / \ 6 10 / \ / \ 5 7 9 11 [8,6,10,5,7,9,11,null,null,null,null,null,null,null,null] 输出树: 8 / \ 10 6 / ...原创 2020-03-05 00:26:35 · 144 阅读 · 0 评论 -
剑指Offer: 树的子结构
剑指Offer: 树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。我们规定空树不是任何树的子结构。样例树A: 8 / \ 8 7 / \ 9 2 / \ 4 7树B: 8 / \ 9 2返回 true ,因为B是A的子结构。输入:1->3->5 , 2->4->5...原创 2020-03-05 00:14:52 · 277 阅读 · 0 评论 -
剑指Offer: 合并两个排序的链表
剑指Offer: 合并两个排序的链表题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。样例输入:1->3->5 , 2->4->5输出:1->2->3->4->5->5算法1 二路归并新建头部的辅助结点dummy,设置cur指针指向dummy若当前l1指针指向的结点的值val比l2指...原创 2020-03-04 23:58:26 · 199 阅读 · 0 评论 -
剑指Offer: 数值的整数次方
剑指Offer: 数值的整数次方题目描述实现函数double Power(double base, int exponent),求base的 exponent次方。不得使用库函数,同时不需要考虑大数问题。注意:不会出现底数和指数同为0的情况样例1输入:10 ,2输出:100样例2输入:10 ,-2 输出:0.01算法 快速幂算法时空分析时间复杂度分析: ...原创 2020-03-03 23:15:34 · 127 阅读 · 0 评论 -
剑指Offer: 矩形覆盖
剑指Offer: 矩形覆盖题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?样例比如n=3时,2*3的矩形块有3种覆盖方法:算法 递归+滚动变量我们将上面模型映射到一维,即是我们有一条长度为n的线段,现在要么放置长度为1,要么放置长度为2的线段,请将该线段填满。 这就转化成了走台阶的题目,一个n级阶梯...原创 2020-03-03 21:59:59 · 376 阅读 · 0 评论 -
剑指Offer: 用两个栈实现队列
剑指Offer: 用两个栈实现队列题目描述请用栈实现一个队列,支持如下四种操作:push(x) – 将元素x插到队尾;pop() – 将队首的元素弹出,并返回该元素;peek() – 返回队首元素;empty() – 返回队列是否为空注意:你只能使用栈的标准操作:push to top,peek/pop from top, size 和 is empty;如果你选择的编程语言...原创 2020-03-03 10:36:10 · 339 阅读 · 0 评论 -
ACM小白扫盲
ACM小白扫盲0x00 ACM是什么ACM 主办的国际大学生程序设计竞赛 ( International Collegiate Programming Contest),简称 ACM/ICPC,自从1977年开始至今已经连续举办43届。其宗旨是提供一个让大学生向 IT 界展示自己分析问题和解决问题的能力的绝好机会,让下一代IT 天才可以接触到其今后工作中将要用到的各种软件。现在,ACM/IC...原创 2020-03-03 09:34:13 · 1143 阅读 · 0 评论 -
剑指Offer: 跳台阶
剑指Offer: 跳台阶题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)样例输入样例(共一行,包含一个整数n):5输出样例(共一行,包含一个整数n):8数据范围 : 1≤n≤15算法1 递归基本解:阶梯为0, 方法1阶梯为1, 方法数1阶梯为2, 方法数2, 可以连续跳2次一级阶梯,或者跳1次...原创 2020-03-03 01:26:44 · 216 阅读 · 0 评论 -
剑指Offer: 链表中倒数第K个节点
剑指Offer: 链表中倒数第K个节点题目描述输入一个链表,输出该链表中倒数第k个结点。注意:k >= 0;如果k大于链表长度,则返回 NULL;样例输入:链表:1->2->3->4->5 ,k=2输出:4算法 (链表遍历) O(n)由于单链表不能索引到前驱节点,所以只能从前往后遍历。第一次变量链表,得到链表的长度length获取倒...原创 2020-03-03 01:14:19 · 252 阅读 · 0 评论