算法
文章平均质量分 79
别挡
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法day09 二叉树
一、用递归和非递归分别实现二叉树的前序,中序,后序遍历 非递归方式: 要输出根左右的顺序,将元素右边先放入栈中元素左边后放入栈中,实现先弹出左边元素再弹出右边元素。 ①入栈,弹出;弹出的①视为根节点 每次while循环只看这一颗小树: ③入栈,②入栈;原创 2024-09-08 00:55:56 · 1130 阅读 · 0 评论 -
算法day08 链表
将【1 -> 2->3 -> null 】变为【1 ->1* -> 2-> 2* ->3 -> 3* 】eh指向et 此时地址 :也就是 et - > 第六个元素5的地址。假设有这样一个链表【 1 -> 2 -> 3 -> 2-> 1 】 已知条件只有链表head。bh指向bt 此时地址 :也就是 bh- > 第五个元素8的地址。sh指向st此时地址 :也就是 sh - > 第三个3的地址。跳出循环时为标志拿到链表尾节点tail 实现单向链表反转 【1 -> 2 -> 3。原创 2024-08-31 23:29:00 · 1055 阅读 · 0 评论 -
算法day07 常见排序稳定性
找一个基准值,大的放右边,小的放左边 ,只关心找到的大于基准值的数,小于基准值的数。交换两者位置不包含稳定性。heapify()的过程也就是对堆结构实现,把数组按堆结构排序,并不关心等值比较,本身也会将数组结构重组,没有稳定性。如果只是从左到右遍历一遍,大的放右边,小的放左边,会遗落掉交换的元素。归并排序,原数组分为左右两个数组,相等值把左数组值先放进help数组中,能够实现稳定性。左右指针同时移动,同时找到一个大的,小的,交换位置.每次循环实现在要插入的范围内有序,可以选择插入的位置,具有稳定性。原创 2024-08-11 20:48:33 · 303 阅读 · 0 评论 -
算法day04 位运算 插入排序 二分法 对数器
使用 ^ 异或运算整个数组,偶数次运算结果为0,只留下最后一个奇数次的数。对数组进行^运算求出最后 两个奇数的和eor。eor提取出二进制最右的1 记为rightOne。rightOnt 对整个数组分组,只保留和eor最右为1一样的元素。因为a,b两个奇数不相等,a^b的结果至少二进制上有一位不相等,一个是0,一个是1。也就是eor的最右为1的一样的元素。对分组后的一个数组求异或就得到其中一个奇数。原创 2024-07-13 17:09:17 · 393 阅读 · 0 评论 -
算法day05 master公式估算递归时间复杂度 归并排序 小和问题 堆排序
2.认识O(NlogN)的排序_哔哩哔哩_bilibili 通过堆排序算法实现将给定的数组元素按大小构建一个完全二叉树,并且二叉树分为最大堆和最小堆两种类型。 最大堆每颗树的父节点是当前树的最大值或者最大值之一; 最小堆每棵树的父节点是当前树的最小值或者最小值之一。原创 2024-07-19 11:59:26 · 517 阅读 · 0 评论 -
算法day06 优先级队列 桶排序 比较器
java提供有PriorityQueue类,如果没有提供优先级队列,例如c语言,需要先创建优先级队列,按需求创建的优先级队列通常效率更高。从优先级最小的个位d开始排序,位数每次加1,直到优先级最大,位数最大的d最后排序。提高效率,如果数组不合法或者不用排序直接返回不用排序。重写Comparator类的compare方法,返回值为负数,前者排在前面。返回值为正数,后者排在前面。每一次排序都实现了在相应d位上的有序。拆出相应d位上的数。原创 2024-08-05 10:04:00 · 487 阅读 · 0 评论 -
算法day03 桶排序 数据结构分类 时间复杂度 异或运算
前提条件是a,b不能是同一个内存地址,而不是说a,b值相等就不能进行位运算相加。进行了n-1次比较。这样的循环有n次,每轮循环进行n-1次,n-2次。这样的循环有n次,每轮循环进行n次,n-1次。比较复杂度:n+n-1+n-2+...+1。循环复杂度:n+n-1+n-2+...+1。比较复杂度:n-1+n-2+...+1。循环复杂度:n-1+n-2+...+1。再循环一次进行n-2次确定次右边一个元素。循环一次进行n次比较,找出一个最小值。再循环一次进行n-1次比较找出次小值。对于有n个元素的数组。原创 2024-07-07 23:47:13 · 1165 阅读 · 0 评论 -
算法day02 回文 罗马数字转整数
搞错了String类型的indexOf方法,理解成获取对应下标的值,实际上是在找对应值的下标。耗时最少的方法尽量不会去调用jdk提供的方法,而是直接使用对应的数学逻辑关系来处理,考虑到罗马数字开头出现每一种情况,然后截取该字符串开头。使用递归循环字符串判断开头。甚至用 == 代替equals方法。原创 2024-07-04 23:21:36 · 493 阅读 · 0 评论 -
算法day1 两数之和 两数相加 冒泡排序 快速排序
当左右指针相遇时,将数组分为左右两个以基准值为界限的小数组和大数组。有这样一个数组:[ 6,1,2,4,6,2 ] ,快速排序是有左右两个数组的下标指针,一个基准数。再从左指针开始比,1比基准值6小,2比基准值6小,4比基准值6小,6比基准值6不大。从右指针开始比,2比基准数6小就和左指针交换位置,同时左指针的值6赋给基准值6.敲了一晚上哈哈,结果超过int范围捏,难受捏。这个时候的小数组是【2,1,2,4,6】 大数组【6】再重新进行快速排序。左右指针相遇时 将基准值6赋给右【2,1,2,4,6 ,原创 2024-07-03 22:32:24 · 511 阅读 · 1 评论
分享