![](https://img-blog.csdnimg.cn/3aa52a169f08413587547568092956d2.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 83
CodeJiao的数据结构和算法之路,挑战自我,不断进步。
CodeJiao
须知少年凌云志 曾许天下第一流
展开
-
Java算法 -- 位图的概念和实现
位图可以利用每一位来对应一个值,比如可以利用int类型的数去存储0~31这个集合的数字。如果该集合内的数字存在,则把对应的位设置位1(默认为0)。如果要存储的集合元素范围超过了32个,则可以用int数组去实现位图,第一个数组元素保存的元素,第二个数组元素保存的数组元素。位图的好处就是可以节省大量的空间,缺点是实现比较复杂。并不是说int类型的位图只可以存储的集合元素,也可以存储例如的元素,在存储的时候设置一下规则就行了,1位对应5,2位对应6,…32位对应36。我们先把完整的实现代码放在这里,后面会分析里原创 2022-07-06 16:27:39 · 1153 阅读 · 1 评论 -
Java算法 -- 单链表的反转、单链表实现栈和队列以及双端队列、K 个一组翻转链表
单链表的反转即把原来的单链表的指针顺序倒置。如下图所示:需要注意的点是,中是值(传递引用也可以认为是特殊的值传递)传递,函数在改变完值后记得赋值给原来的值,变化才会生效。详细请看这篇文章(总的来说就是不改变不改变传递进来的引用副本的值,那么更改是可以生效的。如果改变了引用副本的值,那么对原引用的更改是不生效的。)示例代码:运行结果:下面我们就可以正式的编写反转单链表的代码了:运行结果:下面我们来解释原理:初始状态:第一次循环结束后的状态:第二次循环结束后的状态:第三次循环结束后的状态:因为第三次原创 2022-06-20 19:04:15 · 450 阅读 · 0 评论 -
Java算法 -- 二分查找:查找目标元素最左的位置和最右的位置、局部最小值问题求解
二分查找也是一种在数组中查找数据的算法。它只能查找已经排好序的数据。二分查找通过比较数组中间的数据与目标数据的大小,可以得知目标数据是在数组的左边还是右边。因此,比较一次就可以把查找范围缩小一半。重复执行该操作就可以找到目标数据,或得出目标数据不存在的结论。二分查找的代码:如果有多个目标元素,上面这个元素无法保证目标元素的相对位置,比如保证可以找到第一个目标元素和最后一个目标的索引。假设现在有一个整型数组,他有个特点:相邻的元素不相同。(不一定有序)现在我们要查找这个数组的的一个局部最小值。那么什原创 2022-06-20 00:59:23 · 907 阅读 · 0 评论 -
Java算法 -- 选择排序、冒泡排序、插入排序、前缀和数组、Java中的Math.random()函数、01不等概率随机到01等概率随机、从[1,5]随机到[1,7]随机对数器的使用
选择排序的Java代码如下:冒泡排序的Java代码如下:插入排序的Java代码如下:假设现在有一个整型数组,要求返回这个数组索引位置到位置之间数组元素的累加和。你可以第一时间想到下面这个做法:但是入门每次拿数组都要经过次算术运算显然有点浪费时间了,于是我们可能想到了下面这种二维数组结构去用空间换时间。它的一维索引是的值,二维索引是的值,该二维数组的位置代表了数组索引位置到位置之间数组元素的累加和。假设现在 ,则该二维数组可以表示为:其中代表不赋值,因为大于了。这种方式有2个非常显著的弊端接下原创 2022-06-19 22:31:12 · 335 阅读 · 0 评论 -
原码、补码、反码和Java中整型数据的表示
在Java中 32位的整数的表示范围是 -231 ~ 231 - 1(其中负数占了一半,非负数占了一半),最高位(32位)表示数字的符号,其中0表示整数,1表示负数。比如:-231 转为10进制为-2147483648,在计算机内部为:232转为10进制为2147483647,在计算机内部为:原码的表示与机器数真值表示的一样,即用第一位表示符号,其余位表示数值,例如的十进制的的正负1,用8位二进制的原码表示如下:正数的反码是其原码本身。负数的反码是在其原...原创 2022-06-19 15:13:19 · 773 阅读 · 0 评论 -
Java位运算:位异或运算、位与运算、位或运算、位取反运算、左位移运算、右位移运算、无符号右移运算、不用额外变量交换两个整数的值(使用位异或运算)、只出现一次的数字
位运算符比算术运算符速度要快,但是为什么会快呢?因为算术运算符也是通过计算机通过位运算调用栈来实现的。对于有符号数,一般在最高位保留符号位,最高位1表示负数,最高位0表示正数。在介绍下面的题目之前,我们来看看位异或运算符为,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。下面是的异或运算过程:异或运算你可以理解为不进位的加法运算。异或运算满足下面的规律:位与运算符为&,其运算规则是:参与运算的原创 2022-06-18 14:09:11 · 804 阅读 · 0 评论 -
算法 -- 数据结构和算法的关系、算法定义和特性、算法设计的要求、算法效率的度量方法、函数的渐近增长、算法时间复杂度 、算法空间复杂度
1. 算法概念:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。1.1 数据结构与算法关系程序 = 数据结构 + 算法。数据结构是数据间的有机关系,算法是对数据的操作步骤。没有数据间的有机关系,程序根本无法设计。因为有了数据结构,算法才能诞生。反之,算法又是数据结构得以维持的一个条件,没有算法数据根本无法有规律的打交道,数据之间只会是杂乱无章地碰撞,而数据结构则会消灭。算法是绝对运动的,数据结构是相对静止的,二者是不可分割的关系;你可以把数据结构原创 2022-04-28 09:51:50 · 1084 阅读 · 0 评论 -
数据结构 -- 基本概念和术语、逻辑结构和物理结构(存储结构)、存取结构(读写方式)、抽象数据类型
基本概念和术语、逻辑结构和物理结构(存储结构)、存取结构(读写方式)原创 2022-03-29 15:48:11 · 1389 阅读 · 0 评论