![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
奶昔爆米花
道阻且长 行则将至
展开
-
归并排序-特殊数组排序
归并排序 - 特殊数组题目题解代码时间复杂度题目已知一个几乎有序的数组,几乎有序指的是:如果把数组排好序的话,每个元素移动的距离一定不超过k,并且k相对于数组长度来说是比较小的请选择一个合适的排序策略,对这个数组进行排序题解用小根堆+归并排序完成1.因为排好序后每个元素移动的距离不超过k,那么最小值一定在0~k范围上2.将数组0~k位置的值放到小根堆上,这样堆顶元素一定是数组的最小值3.将堆顶元素与数组0位置交换4.将小根堆的左右边界+1,即下一步的数组范围是1-k+15.继续将当前小根原创 2021-07-26 11:09:10 · 177 阅读 · 0 评论 -
排序算法 - 归并排序
排序算法 - 归并排序递归方式基本思想代码复杂度分析非递归方式基本思想代码时间复杂度递归方式基本思想将数组分为左右两部分,分别进行递归排序排好序的两部分进行合并合并过程定义P1指针指向左部分最左边的值(最小值)定义P2指针指向右部分最左边的值(最小值)定义新数组,大小等于两部分的总大小比较P1和P2指针指向的值,当arr[P1]<=arr[P2]时,将arr[P1]加到新数组中,否则加入arr[P2]如果其中一部分的指针越界,那么将另一部分剩余元素加入新数组中将新数组赋给赋给原创 2021-07-15 12:42:54 · 150 阅读 · 0 评论 -
用递归求数组最大值
用递归求数组最大值基本思想基本思想给定数组,假设左边界为L,右边界为R将数组分为两部分,[L] ~ [mid],[mid+1] ~ [R]分别在两个部分上求最大值,然后比较这两部分的最大值原创 2021-07-15 09:34:05 · 1379 阅读 · 0 评论 -
实现栈,获取栈中最小值
实现栈,获取栈中最小值空间换时间基本思想代码复杂度分析时间换空间基本思想代码复杂度分析两种方式实现,第一种用空间换时间,第二种用时间换空间空间换时间基本思想用两个栈来实现,一个栈维护入栈数据(数据栈),一个栈维护最小值(最小栈)元素入栈时,比较入栈元素与最小栈栈顶如果最小栈栈顶元素更小,那么再次将该最小栈栈顶元素压入最小栈如果入栈元素更小,那么将入栈的元素同步压入最小栈元素出栈时,数据栈与最小栈同步出栈即可,最小栈弹出元素即为当前栈中最小值代码import java.util.原创 2021-07-13 15:06:09 · 668 阅读 · 0 评论 -
删除单链表の指定节点
删除单链表的指定节点删除节点基本思想代码复杂度分析删除节点3 -> 2 -> 0 -> 3 -> 4 -> 5假定删除3这个节点,删除后的链表:2 -> 0 -> 4 -> 5基本思想存在删除头节点的情况先看是否需要删除头节点以及要删除几个头节点头节点删除完成后,当前节点即为链表的头节点,且作为返回遍历单链表用 cur 表示当前节点,用 pre 表示当前节点的前一个节点,用 num 表示目标值当 cur值 = num时,则将原创 2021-07-13 13:21:36 · 717 阅读 · 0 评论 -
链表的反转
链表反转单链表反转单链表反转原创 2021-07-13 11:21:36 · 71 阅读 · 0 评论 -
二分法及题目
二分法时间复杂度题目一题目解题思路代码题目二题目解题思路代码题目三题目解题思路代码时间复杂度二分查找时,第1次二分后的范围为N/2,第2次二分后的范围为N/4,第3次二分后的范围为N/8…若未找到,则在最后范围为1时结束时间复杂度为 O(logN)题目一题目在一个有序数组中,找某个数是否存在解题思路定义三个指针L代表当前查找范围的左边界R代表当前查找范围的右边界mid 代表当前查找范围的中点位置比较mid指针所在位置的值和目标值如果等于当前值,那么结束循环,返回t原创 2021-07-13 10:10:43 · 584 阅读 · 0 评论 -
异或运算及题目
异或运算定义&性质题目一代码执行结果特殊说明题目二定义&性质位运算相同为0,不同为1也可以记作 无进位相加性质1:0 ^ N=N,N ^ N = 0性质2:满足交换律和结合律题目一不用额外变量交换两个值,用异或运算实现交换代码public static void swap(int[] array,int i,int j){ System.out.println(array[i] + " " + array[j]); array[i] = arra原创 2021-07-12 14:05:12 · 732 阅读 · 0 评论 -
排序算法 - 插入排序
插入排序排序逻辑代码复杂度分析排序逻辑1.给定长度为N的数组2.[0]~[0]范围上,自然有序3.[0]~[1]范围上,[1] 位置值若小于[0]位置,则交换4.[0]~[2]范围上,[2] 位置值若小于[1]位置,则交换[1]和[2];交换后判断[1]位置值若小于[0]位置值则交换5.以此类推…代码public static int[] insert(int[] arr){ for (int i = 1; i < arr.length;i++){ // j从原创 2021-07-12 13:39:00 · 57 阅读 · 0 评论 -
排序算法 - 冒泡排序
冒泡排序排序逻辑代码复杂度分析排序逻辑给定一个数组,假设长度为N第一次循环循环范围为[0]~[N-1][0] 和 [1] 比较,如果 [0] 位置值更大,则交换 [0] 和 [1] 位置的数[1] 和 [2] 比较,如果 [1] 位置值更大,则交换 [1] 和 [2] 位置的数…[N-2] 和 [N-1] 比较,如果 [N-2] 位置值更大,则交换 [N-2] 和 [N-1] 位置的数第二次循环循环范围为[0]~[N-2][0] 和 [1] 比较,如果 [0] 位置值更大,则原创 2021-07-12 10:52:50 · 68 阅读 · 0 评论 -
排序算法 - 选择排序
选择排序排序逻辑代码功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入排序逻辑1.给定一个数组,假设长度为N2.选择逻辑:每次选择范围上的最小值,与当前范围的第一个位置交换3.第一步:在[0]~[N-1]范围上找到最小值,与[原创 2021-07-12 09:36:42 · 64 阅读 · 0 评论