算法
文章平均质量分 91
一些曾经做的部分算法笔记
狗二蛋的幸福生活
我亦无他,唯手熟尔
展开
-
Java之HashMap经典算法-红黑树(插入节点平衡调整,左旋转,右旋转)
HashMap红黑树中,每插入一个节点,都要对红黑树平衡进行一个判断,是否需要调整,利用左旋转和右旋转来维护红黑树的平衡原创 2022-08-17 17:46:46 · 1224 阅读 · 0 评论 -
Java之HashMap经典算法(tableSizeFor(int cap)、resize()扩容算法)
关键还是利用了二进制的特性,二进制最高位为1,后面全为0,则必定是2的次幂(20-1、21-10、22-100、23-1000、…),所以该数若不为2的次幂,则在该数最高位前加1,后全补0,则为最接近该数的二的次幂(9-1001---- 16-10000)。这也解释了为什么每次扩容要为2n2n-1 二进制全为1,与任何数做&运算得到的范围都在 0~2n-1,等价于取模,而且位运算更快。扩容后的大小二进制实际就高位增加了1,所以在与hash做&运算后只要判断任何hash的该位是否为1。......原创 2022-08-05 17:46:42 · 371 阅读 · 0 评论 -
队列的应用---迷宫问题(3)
题目如下: 解题思路: 关键就是要利用队列的先进先出的特点,达到广度和深度的搜索,用一个4行2列的二维数组来表示移动的上下左右四个不同方向,还需要一个bool类型的二维数组来标记走过的点避免重复。 先要找到S点,将它放入队列并标记,这是起点,出队,然后判断S点的上下左右四个方向坐标是否越界或者走过,如果能走则将它放入队列,并且记录步数(每当从一点向四周移动一点时,这代表走了一步,并且,该点四周的...原创 2020-03-28 23:43:27 · 303 阅读 · 0 评论 -
各种排序算法总结(排序方法的稳定性、插入排序、冒泡排序、选择排序、快速排序、堆排序、归并排序)
排序方法的稳定性: 对于关键字相同的元素,在其排序完后领先关系保持不变,即原来是…x1…x2…(x1和x2相同),在排序完后依然是…x1…x2…的位置,说明该排序是稳定的,反之是不稳定的。 1.插入排序: 算法思想: 实现将一组数从小到大排列,即从数的第二个开始往前比较,如果它比前面相邻的数小,将它拎出来,然后前面的数往前进一个位置,至于将这个拎出来的数放在哪个位置,当然是放在比前面的数大的前一个位置。(前面的数是已经排完有序的) 代码实现: int s[100];//数组s[] int n;//长度为n,原创 2020-10-07 19:14:29 · 325 阅读 · 0 评论 -
排列组合复习--杭电2049
题目: 解题思路: 这题是很久以前做过的一道题,重新拿出来复习下排列组合等相关知识。 排列:将一组数进行原创 2020-04-05 23:06:14 · 198 阅读 · 0 评论 -
杭电--2104 hide handkerchief
题目大意: 有N个人围坐一圈,每个人身后都有个盒子,其中有一个盒子中有个手绢,而有个憨憨要找到盒子中的手绢,但他有个习惯,需要隔M-1个盒子拿,问他是否能拿到。 解题思路: 拿的次数不是我们所考虑的,我们需要考虑的是是否所有盒子都能被翻到,即N和M是否最大公因数为1,若为1则代表所有盒子都能被找到,反之不能都被翻倒。 其中,我想讲下为什么这道题就转化成求他们的最大公因数: 假设有9(N=9)个人...原创 2020-04-04 14:39:34 · 165 阅读 · 0 评论 -
浅识位运算
引言: 因为不懂一道算法解析里的一条语句,然后翻来覆去的查,最后发现是位运算方面的知识,只好顺便学一下了,奇奇怪怪的知识又增加了。 位逻辑运算: 1.&运算 0&1=0; 0&0=0; 1&0=0; 1&1=1; &运算通常可以用来二进制取位操作,例如一个数&1就是取最末尾的数(因为0&1=0,1&1=1,不改变末尾的值)。 可以用来判断奇偶性,二进制的末尾为0,则这个数为偶数,二进制的末尾为1,则这个数为奇数。(因为一个数为偶数,必定转载 2020-10-09 19:43:01 · 228 阅读 · 2 评论 -
回溯思想---迷宫问题(2)
题目如下: 做题历程: 看到题目时,第一个想法就是回溯,虽然出发点是对的,但是干了几个小时依然卡在了一个地方,就是标记的迷宫点是时刻变化的,当你这条路线走完后又要回到之前的点时,你标记的点又要从走过变为没有走过,回溯实际上就是参数传递再返回,而因为对回溯的不熟悉,不知道如何使标记变量在参数返回时跟着同步变化(真的想了好久啊),在最后实在想不出时看了资料,最后卡住的这点终于得到解决。 解题思路: ...原创 2020-03-28 01:02:17 · 215 阅读 · 0 评论 -
有趣的递归-杭电2045
题目: 解题思路: 这题很有意思,类似铺方格,但是其中又有一些玄妙之处,因为每个格子相邻之间颜色不能相同,首尾不能相同,令格子数为N,涂法为S(N),所以刚开始可以毫不犹豫的写出N=1时,S(1)=3,N=2时,S(2)=6,N=3时,S(3)=6,我们在继续看,当N=4时,我们不看最后一格,前三格就有两种情况,第一种首尾同色,还有一种首尾不同色。 当首尾不同色时,因为只有三种颜色涂,所以前三格...原创 2020-04-28 18:10:42 · 193 阅读 · 0 评论