随笔分类 -  算法与数据结构

该分类下主要包含一些常用算法和常用数据结构的内容
摘要:题目如下: 1、台阶问题 2、未名湖租鞋问题 3、购票问题 4、Sine之舞 5、s01串 6、猴子分苹果 7、汉诺塔问题 8、跳马问题 1、台阶问题 有n阶台阶,上楼时可以一步一个台阶也可以一步两个台阶,编程计算共有多少种不同的走法。 2、未名湖租鞋问题 每年冬天,北大未名湖上都是滑冰的好地方。北 阅读全文
posted @ 2019-06-16 18:16 woz333333 阅读(707) 评论(0) 推荐(0)
摘要:题目如下: 1、求阶乘 2、字符逆序输出 3、FJ的字符串 4、数塔问题 5、最长公共子序列问题 6、N皇后问题 7、铺瓷砖问题 8、01背包问题 1、求阶乘 编写程序计算N! 要求使用递归算法和普通循环算法分别实现 2、字符逆序输出 3、FJ的字符串 FJ在沙盘上写了这样一些字符串: A1 = “ 阅读全文
posted @ 2019-06-15 17:35 woz333333 阅读(814) 评论(0) 推荐(0)
摘要:杭电OJ上的水题:C语言程序设计练习 题目如下: 链接: http://acm.hdu.edu.cn/showproblem.php?pid=2001 注:pid=后面可以为2000 - 2050中的任何一个(对应50道题目) 另外也可以做1000之后的(按顺序做,从1000开始把,1000开头的都 阅读全文
posted @ 2019-05-22 23:13 woz333333 阅读(251) 评论(0) 推荐(0)
摘要:内容: 1、搜索二叉树 2、典型搜索二叉树原理(AVL树、红黑树、SB树) 3、Java中红黑树的使用 1、搜索二叉树 搜索二叉树的定义:对于一棵二叉树中的任意子树,其左子树上的所有数值小于头结点的数值, 其右子树上所有的数值大于头结点的数值,并且树中不存在数值相同的结点。也称二叉查找树 如下图所示 阅读全文
posted @ 2019-01-29 22:15 woz333333 阅读(245) 评论(0) 推荐(0)
摘要:内容: 1、什么是morris遍历 2、morris遍历规则与过程 3、先序及中序 4、后序 5、morris遍历时间复杂度分析 1、什么是morris遍历 关于二叉树先序、中序、后序遍历的递归和非递归版本,在这里有详细代码:https://www.cnblogs.com/wyb666/p/1017 阅读全文
posted @ 2019-01-29 20:23 woz333333 阅读(1284) 评论(0) 推荐(1)
摘要:内容: 1、原始问题 2、拓展题 1、原始问题 题目描述: 给你一个数组,找出数组中每个数左边离它近的比它大的数和右边离它近的比它大的数 要求算法时间复杂度为O(N) 解题思路: 使用一个栈,要求每次元素进栈后要维持栈中从栈底到栈顶元素值是从大到小排列的约定。将数组中的元素依次进栈, 如果某次元素进 阅读全文
posted @ 2019-01-24 22:50 woz333333 阅读(524) 评论(0) 推荐(0)
摘要:内容: 1、窗口内最大值更新结构 2、窗口移动 3、求达标的子数组个数 1、窗口内最大值更新结构 窗口:数组中的一系列数 L与R之间的数就是窗口内的数 L和R的初始位置为数组的左边,可表示为-1 L和R都只能右移,不可后退;且L不可超过R 窗口内最大值更新结构实质上就是一个双端队列(双向链表实现), 阅读全文
posted @ 2019-01-16 12:11 woz333333 阅读(326) 评论(0) 推荐(0)
摘要:内容: 1、原始问题 =》 O(N*logN) 2、BFPRT算法 =》 O(N) 1、原始问题 问题描述:给你一个整型数组,返回其中第K小的数 普通解法: 这道题可以利用荷兰国旗改进的 partition 和随机快排的思想:随机选出一个数,将数组以该数作比较划分为 <,=,> 三个部分, 则 = 阅读全文
posted @ 2019-01-14 22:36 woz333333 阅读(3386) 评论(0) 推荐(0)
摘要:内容: 1、原始问题 =》O(N^2) 2、Manacher算法 =》O(N) 1、原始问题 Manacher算法是由题目“求字符串中长回文子串的长度”而来。比如 abcdcb 的最长回文子串为 bcdcb ,其长度为5 暴力解法: 可以遍历字符串中的每个字符,当遍历到某个字符时就比较一下其左边相邻 阅读全文
posted @ 2019-01-13 20:50 woz333333 阅读(672) 评论(0) 推荐(0)
摘要:内容: 1、问题引入 2、暴力求解方法 3、优化方法 4、KMP算法 1、问题引入 原始问题: 对于一个字符串 str (长度为N)和另一个字符串 match (长度为M),如果 match 是 str 的子串, 请返回其在 str 第一次出现时的首字母下标,若 match 不是 str 的子串则返 阅读全文
posted @ 2019-01-11 20:01 woz333333 阅读(401) 评论(0) 推荐(0)
摘要:内容: 1、递归与多态规划的关系 2、暴力递归 3、动态规划 1、递归与多态规划的关系 暴力递归: 把问题转化为规模缩小了的同类问题的子问题 有明确的不需要继续进行递归的条件(base case) 有当得到了子问题的结果之后的决策过程 不记录每一个子问题的解 动态规划: 从暴力递归中来 将每一个子问 阅读全文
posted @ 2019-01-04 18:59 woz333333 阅读(435) 评论(0) 推荐(0)
摘要:内容: 1、贪心算法介绍 2、贪心算法实例 1、贪心算法介绍 什么是贪心策略(贪心算法): 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略 阅读全文
posted @ 2018-12-29 13:08 woz333333 阅读(444) 评论(0) 推荐(0)
摘要:内容: 1、前缀树详解 2、如何生成前缀树 3、前缀树应用 1、前缀树详解 什么是前缀树: 前缀树又称字典树、Trie树,是一种树形结构,是哈希树的变种,是一种用于快速检索的多叉树结构 典型应用是用于统计和排序大量的字符串(不限于字符串),经常被搜索引擎系统用作文本词频统计 优点是可以最大限度地减少 阅读全文
posted @ 2018-12-29 13:04 woz333333 阅读(274) 评论(0) 推荐(0)
摘要:内容: 1、认识哈希函数与哈希表 2、设计RandomPool结构 3、认识布隆过滤器 4、认识一致性哈希 5、并查集 6、经典的岛问题 1、认识哈希函数与哈希表 哈希函数: Hash(又称散列或哈希)就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值。 这种转换是一种压缩映射 阅读全文
posted @ 2018-12-28 19:52 woz333333 阅读(400) 评论(0) 推荐(0)
摘要:内容: 1、二叉树基础结构及常用函数 2、三种二叉树 3、二叉树的后继节点与前继节点 4、二叉树的序列化和反序列化 5、折纸问题 6、求树的节点 1、二叉树基础结构及常用函数 二叉树的基本结构: 二叉树常用函数: 遍历二叉树: 递归先序遍历、递归中序遍历、递归后序遍历 非递归先序遍历、非递归中序遍历 阅读全文
posted @ 2018-12-26 20:17 woz333333 阅读(314) 评论(0) 推荐(0)
摘要:内容: 1、链表基本结构 2、反转链表 3、打印两个有序链表的公共部分 4、判断一个链表是否为回文结构 5、单向链表划分区域 6、复制含有随机指针节点的链表 7、两个链表相交相关问题 1、链表基本结构 2、反转链表 问题描述: 反转单向链表和双向链表 要求时间复杂度: O(N) 额外空间复杂度: O 阅读全文
posted @ 2018-12-25 23:11 woz333333 阅读(211) 评论(0) 推荐(0)
摘要:内容: 1、转圈打印矩阵问题 2、旋转正方形矩阵问题 3、之字形打印矩阵问题 4、在行和列都排序好的矩阵中找数 1、转圈打印矩阵问题 问题描述: 解决思路: 一圈一圈的打印,比如上面的1到16到1为1圈,6到11到6为1圈,主要就是要注意边界问题 代码: 2、旋转正方形矩阵问题 问题描述: 给定一个 阅读全文
posted @ 2018-12-23 14:05 woz333333 阅读(320) 评论(0) 推荐(0)
摘要:内容: 1、数组实现队列和栈 2、返回栈中最小元素 3、对列与栈 4、猫狗队列问题 1、数组实现队列和栈 2、返回栈中最小元素 题目描述: 实现一个特殊的栈 在实现栈的基本功能的基础上 再实现返回栈中最小元素的操作 要求: pop push getMin 操作的时间复杂度都是O(1) 设计的栈类型可 阅读全文
posted @ 2018-12-22 13:52 woz333333 阅读(237) 评论(0) 推荐(0)
摘要:内容: 1、复杂排序 2、排序总结 3、比较器 4、实际问题 注:实现代码为Java 1、复杂排序 说明:关于简单排序(冒泡排序、选择排序、插入排序) 看这里:https://www.cnblogs.com/wyb666/p/10106010.html 复杂排序主要是以下三种: 归并排序: 时间复杂 阅读全文
posted @ 2018-12-21 23:18 woz333333 阅读(314) 评论(0) 推荐(0)
摘要:内容: 1、时间复杂度和额外空间复杂度 2、简单排序 3、对数器使用 4、递归 注:实现代码为Java 1、时间复杂度 什么是常数时间的复杂度:一个操作如果跟数据量没有关系,每次都是固定时间内完成的操作就叫常数操作 关于时间复杂度: 时间复杂度为一个算法流程中常数操作数量的指标(一般是最差情况下), 阅读全文
posted @ 2018-12-21 23:07 woz333333 阅读(626) 评论(1) 推荐(1)