
数据结构与算法
数据结构与算法专栏,探索算法之美,分享高效数据结构与算法设计的实战心得。
好奇的菜鸟
路虽远,行则将至;事虽难,做则必成。wx:yjtzfywh
展开
-
剑指offer_2_二进制加法(java)
计算二进制加,1+0=1 0+0=0 1+1=10,题目没有限制字符串长度,不能使用字符串转换为整数计算,会溢出;原创 2022-11-23 11:11:08 · 1526 阅读 · 0 评论 -
剑指offer_3_前n个数字二进制形式中1的个数(java)
每次用“i&(i-1)”将整数i的最右边的1变成0。整数i减去1,那么它最右边的1变成0。如果它的右边还有0,则右边所有的0都变成1,而其左边所有位都保持不变。下面对i和i-1进行位与运算,相当于将其最右边的1变成0。以二进制的1100为例,它减去1的结果是1011。1100和1011的位与运算的结果正好是1000。二进制的1100最右边的1变为0,结果刚好就是1000。原创 2022-11-23 11:32:57 · 1084 阅读 · 0 评论 -
剑指offer_1_整数除法(java)
可以使用的符号是加法和减法,处理好边界值(除数是-2^31,除数是-1时,会产生溢出)2、使用被除数减去除数的倍数的方式,计算商;1、使用被除数减去除数的方式,计算商;原创 2022-11-20 16:16:24 · 1052 阅读 · 0 评论 -
使用BitSet对核苷酸数据压缩保存(减少87.5%空间)
DNA中组成基因的核苷酸。每个核苷酸只能是以下4个值之一:A、C、G或T。如果将基因存储为Java字符串(可以将其视为Unicode字符的集合),则每个核苷酸将由一个字符表示,在Java中通常需要16位的存储空间(Java默认使用UTF-16编码)。二进制只需要2位来存储这种具有4个值的类型,00、01、10和11就是可以用2位表示的4个不同值。如果用00表示A,01表示C,10表示G,11表示T,那么一个核苷酸字符串所需的存储空间可以减少87.5%(每个核苷酸从16位减少到2位)。原创 2023-05-24 17:25:29 · 937 阅读 · 0 评论 -
java实现斐波那契数列(递归、迭代、流)
第一个斐波那契数的值是0,第四个斐波那契数的值是2。原创 2023-05-23 15:08:10 · 1713 阅读 · 0 评论 -
汉诺塔(java)
把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。(Tower of Hanoi),又称。原创 2022-12-26 21:30:00 · 969 阅读 · 0 评论 -
二分查找-非递归(java)
【代码】二分查找-非递归(java)原创 2022-12-25 22:43:37 · 915 阅读 · 0 评论 -
图深度优先、广度优先遍历(java)
【代码】图深度遍历(java)原创 2022-12-25 17:18:04 · 2093 阅读 · 0 评论 -
平衡二叉树(java)
平衡二叉树也叫平衡二叉搜索树 (Self-balancingbinarysearch tree) 又被称为AVL树,可以保证查询效率较高。具有以下特点:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1.并且左右两个子树都是一棵平衡二叉树。原创 2022-12-25 14:58:58 · 1559 阅读 · 0 评论 -
二叉排序树(java)
二叉排序树: BST:(Binary ort(Search) Tree),对于二叉排序树的任何一个非叶子节点要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明: 如果有相同的值,可以将该节点放在左子节点或右子节点。原创 2022-12-23 19:40:06 · 929 阅读 · 1 评论 -
赫夫曼压缩解压(java)
压缩、解压、测试代码。原创 2022-12-23 00:06:44 · 1093 阅读 · 0 评论 -
赫夫曼树(java)
赫夫曼树:当用 n 个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。原创 2022-12-22 15:37:44 · 874 阅读 · 0 评论 -
堆排序(java)
【代码】堆排序(java)原创 2022-12-22 14:50:20 · 929 阅读 · 0 评论 -
二叉树简单遍历、查找、删除(java)
【代码】二叉树简单遍历、查找、删除(java)原创 2022-12-21 17:01:40 · 972 阅读 · 1 评论 -
顺序存储二叉树(java)
【代码】顺序存储二叉树(java)原创 2022-12-21 16:58:45 · 879 阅读 · 0 评论 -
二叉树线索化(java)
充分利用空节点,作为前驱节点或后继节点。原创 2022-12-21 16:28:09 · 989 阅读 · 0 评论 -
HashTab基于链表简单实现(java,不包含扩容)
【代码】HashTab基于链表简单实现(java,不包含扩容)原创 2022-12-20 20:12:38 · 874 阅读 · 0 评论 -
斐波那契查找算法 (java)
类似二分查找,mid取值按照黄金分割比取,斐波那契数组最接近黄金分割比数组。原创 2022-12-20 15:03:53 · 1202 阅读 · 0 评论 -
插值查找(java)
适用于有序序列分布比较均匀数据。原创 2022-12-20 14:07:50 · 846 阅读 · 0 评论 -
二分查找-递归(java)
【代码】二分查找(java)原创 2022-12-19 17:36:21 · 1115 阅读 · 0 评论 -
线性查找(java)
【代码】线性查找(java)原创 2022-12-19 16:45:10 · 860 阅读 · 0 评论 -
基数排序(java)
【代码】基数排序。原创 2022-12-19 16:23:43 · 847 阅读 · 0 评论 -
归并排序(java)
【代码】归并排序(java)原创 2022-12-18 19:35:39 · 866 阅读 · 0 评论 -
快速排序(java)
【代码】快速排序(java)原创 2022-12-18 16:31:18 · 844 阅读 · 0 评论 -
希尔排序(java)
要点:在插入排序之前,调控数组的顺序 ,减少数据移动。原创 2022-12-18 13:20:12 · 847 阅读 · 0 评论 -
插入排序(java)
要点:从未排序数据拿到待排序的数字,和已排序的数据进行比较,找到合适的位置插入。原创 2022-12-18 11:15:05 · 851 阅读 · 0 评论 -
选择排序(java)
要点:从一组数据,找出最大或者最小的数据,与开始位置的数据进行交换。原创 2022-12-18 10:21:11 · 837 阅读 · 0 评论 -
冒泡排序(java)
要点:元素与旁边元素比较,根据比较结果,决定是否需要交换位置。原创 2022-12-16 20:23:13 · 848 阅读 · 0 评论 -
八皇后问题92种解法(java)
1 5 8 6 3 7 2 4 说明:第一行放第一列,第二行放第五列,第三行放第八列,第四行放第六列,第五行第三列,第六航第七列,第七行第二列,第八行第四列。原创 2022-12-16 14:33:34 · 1348 阅读 · 3 评论 -
迷宫回溯(java)
使用数组表示图像, 0表示没有走过,1表示墙,2表示通路可以走,3表示改点已经测试,无法走通。有如下一个8*7的迷宫,蓝色的小球如何移动到黑色小球的位置?原创 2022-12-16 13:33:46 · 887 阅读 · 0 评论 -
逆波兰计算器(java)
【代码】逆波兰计算器(java)原创 2022-12-15 11:37:24 · 916 阅读 · 1 评论 -
中缀表达式计算(java)
容器栈计算并测试原创 2022-12-14 20:02:24 · 1009 阅读 · 0 评论 -
数组栈(java)
【代码】数组栈(java)原创 2022-12-14 19:58:42 · 971 阅读 · 0 评论 -
单向环形链表-约瑟夫问题(java)
【代码】单向环形链表-约瑟夫问题(java)原创 2022-12-14 14:44:04 · 875 阅读 · 0 评论 -
双向链表增、删、改、按序号插入(java)
【代码】双向链表增、删、改、按序号插入(java)原创 2022-12-14 11:35:14 · 990 阅读 · 0 评论 -
单链表翻转、逆序打印、有序插入(java)
【代码】单链表翻转、逆序打印、有序插入(java)原创 2022-12-13 20:18:22 · 936 阅读 · 0 评论 -
环形数组链表(java)
【代码】环形数组链表。原创 2022-12-13 13:59:25 · 1107 阅读 · 0 评论 -
数组链表(java)
【代码】数组链表。原创 2022-12-13 13:58:35 · 1011 阅读 · 0 评论 -
二维数组与稀疏数组转换(java)
稀疏数组:是一个数组,他的作用是将二维数据保存的值进行优化,减小储存数据的大小。格式:稀疏素组是一个(n+1)*3的二维数组,其中n表示二维数组中有多少个不同的值;举例:如下数组为一个11*11的二维数组,有3个位置不是0,所以n为3。此例中保存二维数组需要保存11*11个数字,保存稀疏数组需要4*3个。当一个数组中大部分元素为0,或者为同一个值得数组时,可以使用稀疏数组来保存该数组;。......原创 2022-08-17 08:00:05 · 1085 阅读 · 1 评论 -
力扣-两数之和
力扣-两数之和一、题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], targ原创 2022-06-30 16:48:00 · 945 阅读 · 0 评论