![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 60
F_X_X_C
这个作者很懒,但一定留下了什么...
展开
-
日记2021.11.6
星期六排、对于快速排序的思考通过洛谷刷题我找到了一套快排模板,它比左神的那套更简洁,不需要将顺序打乱,它从中间开始向左右两边递归,但有一点,我调试了半天才看出来;对于中间值,是在一开始赋值的时候就把中间值mid固定下来,而并不是表示中间值的下标 int mid = arr[(L + R) / 2];举个例子,如果说在某个qSort中,中间值比范围里所有的值都小,那首先,i不会动,j会径直往前等于中间值然后,中间值会被扔到最前面,i来到中间值的下一个,而接下来的比较也会是和扔到原创 2021-11-06 22:56:40 · 54 阅读 · 0 评论 -
洛谷【算法1-1】模拟与高精度题单
第三题:玩具谜题题目:一圈玩具小人有的朝内有的朝外,给定许多指令【往我的哪个方向(左或者右) 走多少位】,因为小人朝向不同,所以有4种情况分析:(1)判断时有四种情况:人朝里向左,人朝里向右,人朝外向左,人朝外向右,而对于一个圈而言,如果不好分析,可以将其平铺成线,也就是变成数组形式,再向左和右各延拓一个周期;(2)人朝里向左和人朝外向右是一样的,在数组上都是往左移动,反之就是向右移动;如果向左移动,可能会到负数,也就是(curSit - count) < 0, 这时可以加上一个小人总数(原创 2021-11-06 00:29:41 · 220 阅读 · 0 评论 -
算法体系结构第十一课
一、序列化把一棵树按照某种遍历进行文本格式保存,注意保存时要保存空;比如一棵树的结构是: __1 / 2__ \ 3先序遍历序列化的结果是:1, 2, #, 3, #, #, #,原创 2021-11-06 00:19:59 · 59 阅读 · 0 评论 -
算法体系结构第十课
一、返回可能成环的两条单链表如果相交的第一个结点分为三种情况讨论:1.都无环全都遍历到最后,如果俩结点是一样的,必相交,长链表先走两链表长度差值步,再一起走到相等的结点即可2.一个有环一个无环必不可能相交,所以直接返回空;3.都有环要么有环不相交,要么相交后成环,要么双马尾;返回入环结点:快慢指针法,快指针指到空时无环,返回空,快慢指针相遇后,从该位置和头结点开始一步一步走,相遇时即是入环结点;coding:1.主函数:获取两个链表的入环结点,都为空即都无环,都不为空即都有环,进入相原创 2021-11-06 00:19:48 · 56 阅读 · 0 评论 -
算法体系结构第六课
一、堆结构采用一个数组进行堆结构的存储heapSize以内的数便是堆结构每个子节点的父节点下标: (i - 1) / 2父节点的左孩子和右孩子的下标: 2 * i + 1 2 * i + 2二、heapInsert:(加进来的数进行调堆)加到末尾的数不断与自己的父节点进行比较,直到到达根节点或者比自己的父节点的值小,就停下;while (arr[index] > arr[(index - 1) / 2]) { swap(arr, index, (ind原创 2021-11-05 22:24:56 · 58 阅读 · 0 评论 -
算法体系结构第九课
一、寻找链表的中点(1)需要链表长度在3及其以上(2)一个快指针一个慢指针1.中点或上中点Node slow = head.next;Node fast = head.next.next;2.中点或下中点Node slow = head.next;Node fast = head.next;3.中点或上中点前一个结点Node slow = head;Node fast = head.next.next;4.中点或下中点前一个结点Node slow = head;Node f原创 2021-11-05 22:24:49 · 56 阅读 · 0 评论 -
算法体系结构第八课
一、前缀树1.插入(指示牌)(1)root---插进地下的树根里(2)pass---有很多游客走过(3)path---有一条小路(4)null---new---工人施工---没有、建出来(5)node = node.nexts[path] ---人很多,接踵而至---下一个走上一个踩的石头(6)pass---end---一直走到尽头2.删除(放伞处)(1)search---看看哪把伞(2)root---底座钉在地上(3)pass-- ---拿伞走人(4)path---伞上有蜘蛛(原创 2021-11-05 22:24:25 · 50 阅读 · 0 评论 -
算法体系结构第四课
一、归并排序1.递归法递归函数:(basecase:当L = R时,return)取得数组的中间元素下标mid,对它左边也就是[L…mid]调用递归进行排序,对它右边也就是[mid…R]调用递归进行排序,对这两边进行merge;merge函数:传入参数有 L、R、mid、arr准备一个帮助数组help[ ],与它对应的下标值 i,两个指针p1和p2,当两个指针都未越界的时候,help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++]原创 2021-11-05 22:24:14 · 95 阅读 · 0 评论 -
算法体系结构第七课
一、最大线段重合问题给定许多线段,返回重合线段区域最多的线段数(规定每条线段都是从整数开始)挫办法:计算每个 .5被多少给定的线段包含,返回最大的 .5的线段数实现:原创 2021-11-05 22:24:06 · 62 阅读 · 0 评论 -
算法体系结构第十二课
一、完全二叉树的判断1.流程:(1) 按层遍历,如果一个结点左孩子为空右孩子不为空,返回false;(2)当遇到第一个不满的结点时,后面的结点需要全是叶子结点;2.code:代表是否不满的boolean类型的变量leaf设为false;满足上述条件任意一个的,都返回false,而第二个条件:(是的,不满) && 不是叶子结点,所以&&后面的 leaf像一个开关,打开了就不关闭 在遍历到第一个不满的结点时,其实还是认为它是满的(leaf == false),所原创 2021-11-05 22:23:55 · 88 阅读 · 0 评论 -
算法体系结构第十三课
一、完全二叉树的判断1.第三种判断方法:用结点从左右是满的开始,填满下一层(1)如果是满的,则左右高度相等或者左比右高1,(2)如果左完全,右满,则左比右高1,(3)如果左满右满,参考(1)(4)如果左满右完全,左右高度相等(5)如果左满右满,参考(1)二、返回最大BST的头部1.树型dp和返回最大BST的尺寸类似,不过BST的判别条件改成了最大头部为本树的头2.挫办法(1)通过中序遍历获取当前结点的最大BST,如果非0,则返回该节点;(2)如果为0,则用左右孩子调用当前函数,谁大返原创 2021-11-05 22:23:43 · 89 阅读 · 0 评论 -
算法体系结构第十四课
一、怎样让一天内开会场次最多1.贪心按照会议结束的时间进行排序,如果有开始时间比此次会议的结束时间晚的,就办它,再让时间线等于它的结束时间;2.暴力每次拿出一个会议当做要安排的第一个会议,通过递归看看这样安排后还能安排多少会议;递归函数:每次将遍历到的数组元素删掉的新数组进行递归二、分金问题描述:拆分金条,每次拆分时都要花费与金条长度对应的铜板,问怎么花费最少的铜板切成给定长度的金块1.贪心把给定的数组放入小根堆中,弹出两个,加起来,记一下代价,放入堆中,直到堆只剩一个;2.暴力取任意原创 2021-11-05 22:23:23 · 45 阅读 · 0 评论 -
算法体系结构第十五课
一、朋友圈问题给定一个正方形二维数组,认识的人一定互相认识,自己一定认识自己,问有多少个朋友圈1.解法:并查集基础应用,当这两个人交叉的点的值是1的时候,把他们联结一下,继续遍历下一个结点,而且为优化常数时间,只需要遍历矩阵的上半部分 for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { if (M[i][j] == 1) {原创 2021-11-05 22:23:07 · 51 阅读 · 0 评论 -
算法数据结构第五课
一、前缀和假设0 ~ i上整体累加和是x,求必须以i位置结尾的子数组,有多少个在 [lower , upper] 上,等同于求i之前的所有前缀和中,有多少落在 [x - upper , x - lower] 上,如果说一个前缀和在[x - upper , x - lower]上达标,那么必定有一个以i结尾的子数组在[lower, upper]上达标。...原创 2021-11-05 22:22:50 · 123 阅读 · 0 评论 -
洛谷第2题 扫雷
输入矩阵的 宽 长,中间用空格隔开;输入矩阵,*号表示有雷,?表示没有;在原矩阵的基础上,原创 2021-11-01 09:01:49 · 63 阅读 · 0 评论 -
洛谷第1题 P1042 乒乓球
洛谷AC的第一题!主要卡点(1)E之后的数据不能管,要break掉;(2)当输或赢的数量大于等于11时(注意是大于等于!不是等于!),还要判断输赢大于等于2,才能输出剩余的(也就是当前正在比赛的)数据;import java.util.ArrayList;import java.util.Scanner;注意主类要改成Main,我想学C++了...tm题解全是C++!淦!java的题解一个都找不到!public class Code01_PingPong { public stat原创 2021-10-31 21:17:06 · 121 阅读 · 0 评论 -
暴力递归1
第一题:打印一个字符串的所有子序列原创 2021-06-15 23:05:40 · 100 阅读 · 3 评论 -
堆、堆排序
一、完全二叉树一棵树要么是满的,要么在满的路上二、堆的概念与实现堆就是完全二叉树,也叫优先级队列堆可以由数组来实现,先定义一个比较大的数组长度,而真正有用的、代表了堆结构的数组的长度小于数组实际长度;三、大根堆与小根堆的概念当一棵完全二叉树,包括它本身和它的所有子树在内,的根节点大于等于所有叶子结点的值的时候,此完全二叉树被称为大根堆;小根堆类似;四、HeapInsert向一个堆里添加一个数,让它向上看,如果说大于父节点就让它交换,实现上浮/*传递过来的时候,index对应的数值已经在数原创 2021-04-17 23:05:50 · 84 阅读 · 0 评论 -
随机数、链表
一、随机数的产生Math.Random产生[0, 1)之间的任意小数Math.Random * (value + 1)产生[0, value + 1)之间的任意小数(int)Math.Random * (value + 1) 产生[0, value]之间的任意整数二、链表1.链表的反转(1)创建双向链表需要一个头指针next,一个尾指针last还要有一个值,通过构造方法传入Node public static class Node { Node last;原创 2021-04-01 12:18:00 · 191 阅读 · 0 评论