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

常见数据结构和算法介绍,学习,研究和实现
摘要:并查集原理 如果某个部落过于庞大,则部落成员见面可能不认识。已知某个部落成员关系图,任意给出其中两个人,判断是否有亲戚关系。规定:1)若x、y是亲戚,y和z是亲戚,则x和z也是亲戚;2)若x、y是亲戚,则x的亲戚也是y的亲戚,y的亲戚也是x的亲戚。 如何才能快速判断2个人是否有亲戚关系? 以上第1) 阅读全文
posted @ 2022-05-09 23:46 明明1109 阅读(123) 评论(0) 推荐(0) 编辑
摘要:题目来源:01背包 | 牛客网 描述 已知一个背包最多能容纳体积之和为v的物品。现有 n 个物品,第 i 个物品的体积为 vi , 重量为 wi。求当前背包最多能装多大重量的物品? 数据范围: 1≤v≤1000,1≤n≤1000,1≤n≤1000 , 1≤vi≤1000, 1≤wi≤1000 进阶: 阅读全文
posted @ 2022-02-13 23:55 明明1109 阅读(73) 评论(0) 推荐(0) 编辑
摘要:动态规划算法基本概念 动态规划算法的2个基本要素:最优子结构和子问题重叠。 最优子结构 应用动态规划算法第一步:刻画最优解的结构。当问题的最优解包含其子问题的最优解时,称该问题具有最优子结构性质。反过来说,可以利用子问题的最优解推导出问题的最优解。 通常,利用子问题的最优子结构性质,以自底向上的方式 阅读全文
posted @ 2021-04-28 17:16 明明1109 阅读(830) 评论(0) 推荐(0) 编辑
摘要:前导0计数 问题 1的前导0个数为31,对应16进制数为0x0000 0001。 2的前导0个数位30,对应16进制数为0x0000 0002。 如何计算一个int型数对应二进制数前导0的位数呢? 解决思路 轮询bit位算法 开始想到的最简单的办法是从左边最高位开始,向低位轮训,一直到遇见位1。 / 阅读全文
posted @ 2021-01-14 12:19 明明1109 阅读(1170) 评论(0) 推荐(0) 编辑
摘要:题目 0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。 示例 1: 输入: n = 阅读全文
posted @ 2021-01-04 01:23 明明1109 阅读(95) 评论(0) 推荐(0) 编辑
摘要:二叉查找树有几个地方没搞明白,特别是删除结点。特写这篇文章,认真研究、记录一下。 二叉搜索树重要性质 二叉搜索树,也叫二叉树查找树,英文名Binary Search Tree,简称BST,是一颗特殊的二叉树,是查找表的一种实现。满足以下性质: ∀结点x ∈ U(U是二叉树所有结点集合), 如果y是x 阅读全文
posted @ 2020-12-12 15:39 明明1109 阅读(437) 评论(0) 推荐(1) 编辑
摘要:简介 本文包含的排序算法:冒泡排序、快速排序、堆排序、归并排序、java内置排序,使用java语言实现。 问题描述:对列表A[p..r]进行排序,使得A元素按非递减顺序排列。 1. 冒泡排序 基本思想 从起始位置p开始,相邻元素比较,如果当前元素较大,则交换到相邻元素组的靠后位置。这样,一直比较、交 阅读全文
posted @ 2020-11-21 17:09 明明1109 阅读(149) 评论(0) 推荐(0) 编辑
摘要:1. 基本概念 堆,分为大顶堆(大堆)和小顶堆(小堆),是顺序存储的完全二叉树,并且满足以下特性之一: (1) 任意非终端结点关键字不小于左右子结点(大堆) ki >= k2i+1并且ki>=k2i+2 其中,0 <= i <= (n-1)/2,n是数组元素个数 (2) 任意非终端结点关键字不大于左 阅读全文
posted @ 2019-01-11 11:16 明明1109 阅读(7415) 评论(0) 推荐(0) 编辑
摘要:本文例程下载链接:ListDemo 链表 vs 数组 链表和数组的最大区别在于链表不支持随机访问,不能像数组那样对任意一个(索引)位置的元素进行访问,而需要从头节点开始,一个一个往后访问直到查找到目标位置。 单链表 与顺序表相对,链表是一种链式存储方式。单链表是实现顺序表最简单的一种链表,根据是否包 阅读全文
posted @ 2018-10-29 02:28 明明1109 阅读(2244) 评论(0) 推荐(0) 编辑
摘要:参考 1. 七大查找算法 | 博客园 主要思想 二分查找算法是傻瓜式的将待查找序列一分为二进行查找,直到找到或者查找失败。插值查找算法,是针对待查找序列均匀分布特点、结合二分查找算法进行改进的一种自适应查找算法。 一般的,二分查找范围一个很重要的点 middle = (left + right)/2 阅读全文
posted @ 2018-09-11 01:49 明明1109 阅读(939) 评论(0) 推荐(0) 编辑
摘要:参考: 1. 顺序查找 | 博客园 基本思想: 顺序查找,就是从第一个元素开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败。 特点: 1. 对待查序列(表)无要求 -- 待查找序列可以是有序,也可以是无序; 2. 从第一个元素开始; 3. 需要逐一遍历整个待查序列(除非已经找到); 4. 阅读全文
posted @ 2018-09-10 02:01 明明1109 阅读(6241) 评论(0) 推荐(0) 编辑
摘要:参考 1. 二分查找法 | 博客园 二分查找 在有序的顺序表中查找元素,可以通过二分查找算法进行查找。 基本思想: 假设是递增序列(或者不减序列), 先通过待查找顺序表的最左端元素索引left 和最右端元素索引right求得中间元素索引middle( middle=(left+right)/2 ), 阅读全文
posted @ 2018-08-29 00:43 明明1109 阅读(506) 评论(0) 推荐(0) 编辑