
数据结构与算法
Java编程小辉
两年半Java开发经验,24届毕业生
GitHub:https://github.com/qiuquanhui 正在求职找工作中
展开
-
插入排序(排序算法)
插入排序,类似于扑克牌的玩法一样,在有序的数组中,扫描无序的数组,逐一的将元素插入到有序的数组中。我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。原创 2024-06-06 17:50:20 · 403 阅读 · 0 评论 -
选题排序(十大排序算法)
选择排序:每一次找出数组中最小的元素,并放在对应的索引位置上。一般为两位for循环,内层for循环不断的缩减。不稳定,时间复杂度为 O(n²)我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。原创 2024-06-04 15:15:40 · 352 阅读 · 0 评论 -
冒泡排序(经典)
2.i 的初始化为 0,是j的初始化也为 0,注意 j 的终止条件为:j < arr.length - i - 1,是为了防止越界。1.优化的 flag 是为了减少排序次数,如果在一次比较中都没有交换数据,那么这个数组就是有序的。总共由两次循环,外层循环为总共需要比较多少次,一般全部无序的数组,需要比较该数组的长度的值。内层循环,每一次比较需要比较多少次,每一次都比上一次减少一次的次数。我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。相邻的两个元素的比较,每次选出一个最大值。原创 2024-05-30 10:59:43 · 260 阅读 · 0 评论 -
移除链表元素
而链表的移除,只需改变改节点的前一个节点的取向指向改节点的下一个节点就可以了。代码:pre.next = cur.next;在解题的过程中,还存在一个问题,如果要删除头指针呢?头指针没有前一个节点该如何删除呢?我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。不创建虚拟头指针,就是需要对头指针进行一次单独的处理。还记得数组的移除元素吗?是使用双指针的不断覆盖完成。此时有创建虚拟头指针的方法与不创建虚拟头指针的方法。给你一个链表的头节点。时间复杂度为O(n)时间复杂度为O(n)原创 2024-05-29 10:23:33 · 408 阅读 · 0 评论 -
单链表,双向链表,循环链表
如上图所示,链表是由多个节点组成,节点由数据域与指针域组成,数据域用于存储数据,指针域指着下一个节点,其中第一个节点为头节点,倒数第二个节点的指针域指向空指针。链表的查询的性能较慢,每一次查询都需要从头指针出发,一个节点连着下一个节点,而增删改的时候只需要修改一个节点的指针。链表的底层内存不是连续的内存空间,是分散的内存块,一个块的指针连着下一个块。双向链表想较与单链表,多了一个prev指针域,用于指向前一个节点。当下是找工作ing,欢迎关注,持续分享。链表分为单链表,双向链表,循环链表。原创 2024-05-29 10:21:52 · 433 阅读 · 0 评论 -
螺旋矩阵(算法题)
我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。终点:**循环不变量,**每一次循环遵循左闭右开的原则。所有元素,且元素按顺时针顺序螺旋排列的。原创 2024-05-28 12:50:32 · 292 阅读 · 0 评论 -
有序数组的平方
时 result[index–] = nums[right] * nums[right];时 result[index–] = nums[left] * nums[left];因为有负数的存在,所以最大值一定是在最左边或者最右边,一定不在中间。我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。逐一的找出最大值,插入到result的最右边。定义最左边的指针与最右边的指针,逐一找出最大值。依旧是双指针,逐一找出最大值。初始化一个result数组。组成的新数组,要求也按。原创 2024-05-28 12:47:59 · 403 阅读 · 0 评论 -
移除元素(算法题)
示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。快慢指针,慢指针对应着返回的结果,快指针不断的向前寻找正确的值。正确的值就是不等于val的,说起来比较绕口,我们来看看代码。给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。元素的顺序可以改变。看代码中,快指针一步一步的向前搜索,慢指针用于锁定正确的值。原创 2024-05-27 19:41:43 · 372 阅读 · 0 评论 -
长度最长的子数组
我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。,并返回其长度**。**如果不存在符合条件的子数组,返回。依旧是双指针,此次我们也可以称为滑动窗口。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。//滑动,左指针向前。原创 2024-05-27 19:38:16 · 443 阅读 · 0 评论 -
二分查找(经典)
使用二分查找法,要注意循环不变量,当 right = nums.length - 1 时,一开始的范围为左闭右闭[left,right],那么你在循环的条件为while(left <= right)。当 number [middle] > target 时 right = middle - 1;遵循上方的左闭右闭原则。我是小辉,24 届毕业生。当下是找工作ing,欢迎关注,持续分享。因为left = right 是有意义的。第一从一个升序的整数数组中,找到目标值,,如果目标值存在返回下标,否则返回。原创 2024-05-26 14:16:50 · 452 阅读 · 0 评论 -
数组的理论知识
因为数组的内存空间是固定的,会造成内存不足或浪费的情况。而ArrayList是动态数组,它的大小会随着数组存储的元素大小而变化而且ArrayList还可以存储对象。,O(n),因为数组只可以覆盖,不可直接修改,比如我们删除 arr[1],那么之后的元素逐一的往前移动,此时 arr[1] = J,arr[2] = E。在Java中,数组我的经常使用的是动态数组ArrayList用于存储相同对象类型的数据。为什么有数组了,还要有ArrayList这种动态数组呢?数组的查询效率是比较快的,达到O(1)。原创 2024-05-26 14:15:54 · 347 阅读 · 0 评论