自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 剑指OFFER第24题--反转链表

而且,你只需要思考问题 A 与子问题 B、C、D 两层之间的关系即可,不需要一层一层往下思考子问题与子子问题,子子问题与子子子问题之间的关系(也就是说,递归只能考虑当前层和下一层的关系,不能继续往下深入)。一般,我们需要考虑F(n)和F(n-1)的关系,那么这里,如果n代表以node为头节点的单向链表,那么n-1就代表以node.next为头节点的单向链表.所以,这个问题就可以是:F(node=1)=F(node=2)+ 反转node=2和node=1。那么,F(node=1)=F(node=2)+?

2022-11-08 22:06:32 222 1

原创 剑指OFFER第22题--链表中倒数第k个节点

定义指针fast,slow,倒数多少个,fast就移动多少步,然后slow和fast一起移动,直到fast指向nullptr。

2022-11-07 22:06:59 118

原创 剑指OFFER第21题--调整数组顺序使奇数位于偶数前面

使用一个额外数组,如果是奇数,就放到该数组前面;如果是偶数,就放到该数组后面。

2022-11-02 22:23:17 121

原创 剑指OFFER第20题--表示数值的字符串

算法原理:开始时,自动机处于“初始状态”,随后,它顺序的读取字符串中的每一个字符,并根据当前状态和读入的字符,按照某个事先约定好的“转移规则”,从当前状态转移到下一个状态;当字符串全部读取完毕后,如果自动机处于某个“接受状态”,则判定该字符串“被接受”;需要注意的是,当没有对应的“转移规则”时,算法将提前中止,此时也可以被视作“被拒绝”。该方法可以看做一种暴力枚举方法的延伸:它穷举了在任何一种情况下,对应任何输入,需要做的事情。自动机与字符串查找算法(KMP算法)有着密切联系,并且是实现正则表达式的基础。

2022-11-01 22:54:49 139

原创 插值查找算法

核心思想:对于一个有序数组,求mid的公式为:mid=(high-low)*(findVal-arr[low])/(arr[high]-arr[low]);代码实现:public class InterpolationSearch { private static int interpolationSearch(int[] arr,int findVal){ int low=0; int high=arr.length-1; ..

2021-08-23 10:34:07 55

原创 斐波那契查找算法

核心思想:对于一个有序数组,按照黄金分割点划分数组,而不像二分查找算法按照中间点划分。代码实现 步骤:计算出一个斐波那契数组 找出斐波那契数组中比有序数组长度稍大的那个数 建立一个临时数组,长度为第二步中找出的那个数,元素为原来有序数组中的元素,超过原来数组长度的部分用原来数组最后一位的元素补齐。 进入迭代,mid的公式为:mid=left+fib[k-1]-1;代码实现:import java.util.Arrays;public class FibonacciSearch..

2021-08-23 10:30:43 90

原创 二分查找算法

核心思想:对于一个有序数组,如果目标值小于中间值,则目标值在数组的左半边;反之,则在右半边;或者,目标值正好是中间值。通过不断缩小查找范围,从而找出目标值的索引。递归方法代码实现public class BinarySearch { private static int binarySearch(int[] arr,int left,int right,int findVal){ if(left>right){ return -1;..

2021-08-23 10:14:55 57

原创 有关二叉树的知识点

0 相关概念二叉树的特点:每个节点最多有两个子树 每个子节点都是父节点的左子节点或者右子节点满二叉树的特点:叶子节点都在最下一层 节点总数为(2^n-1)个(n为树的深度;减一是因为根节点只有一个)完全二叉树的特点:所有叶子结点都在最后一层或者倒数第二层 最后一层的叶子节点在左边连续,倒数第二层的节点在右边连续 满二叉树一定是一个完全二叉树 已知完全二叉树的总节点个数为n求叶子节点个数:当n为奇数时:(n+1)/2 当n为偶数时 : n/2 已知完全二叉树的总节点个数...

2021-08-22 09:57:21 576

原创 Shell排序算法

核心思想:希尔排序是在各种排序的基础上增加了分组的概念,{n/2,(n/2)/2...1},称为增量序列通过不断将增量序列减小,分的组逐渐变少,从而实现数组有序。代码实现重点:在外层循环中定义增量序列,从arr.length开始,每次迭代除以2。 在组内实现一个排序算法。代码实现如下所示:import java.util.Arrays;public class ShellSort { private static void shellSort(in...

2021-08-18 10:27:22 49

原创 选择排序算法

核心思想:在每轮循环中,找出该次循环中的最大数(或最小数)的索引,将该索引上的数与本次循环中数组最大索引上的数交换。代码实现重点:从后向前遍历数组,定义一个变量maxIndex记录该轮循环数组最大数的索引。 在最大索引前面(包含该索引)寻找该轮循环中最大数的索引,并通过赋值给maxIndex记录该索引位置。 将该轮循环中数组的最大索引与该轮循环中的最大数索引交换。import java.util.Arrays;public class selsectionsort { p..

2021-08-17 11:24:03 70

原创 基数排序算法

核心思想:定义10个桶,即一个二维数组,分别是0-9行,同时取出每个数的个位或者百位或者千位等,将原数放入取出的数字对应的桶(行)中。然后依次按行取出二维数组中的数放回原数组。将最大数的所有位放完后,数组就有序了。代码实现重点:定义一个变量a(1,10,100等),用数来除以这个数后模以10得到数的各个位置上的数字。 定义一个二维数组来存放数,定义一个一维数组来记录每行有多少个数。 当a小于最大数的最大位数时,将数放在二维数组中,并记录该行有多少个数;将二维数组中的数按行取出,放回原数组,将.

2021-08-17 10:54:23 60

原创 快速排序算法

核心思想:定义一个参考值,将比参考值小的放在参考值左边,比参考值大的放右边。这样,就找出了参考值在数组中的位置。代码实现重点:方法传入三个参数,原数组,左边界low,右边界high。 定义两个指针指向左右边界,以便来遍历数组;再定义一个临时变量记录参考值。 当左指针小于右指针时,先向左移动右指针(?),找到一个比参考值小的元素,然后覆盖左指针指向的元素(?),左指针移动一位;再向右移动左指针,指向一个比参考值大的元素,覆盖右指针指向的元素,右指针移动一位。 当退出while循环后,左右指..

2021-08-15 11:23:32 77

原创 归并排序算法

核心思想:采用分治算法,“分”可以用递归实现,重点是“治”的过程,即合并的过程。代码重点:传入的参数中不仅需要原数组,还需要一个临时数组,来保存合并的结果。 方法传入形参中需要左右边界和中位数索引。 定义两个变量,一个指向左半数组的左边界,一个指向右半数组的左边界(即mid+1处)。 还需要定义一个临时变量,当做临时数组的索引指针。 将左右两半数组中的元素按照从小到大的顺序,依次放入临时数组中。需要注意的是,因为使用了while循环,条件中取得是左右两边界的并集,所以可能有半边数组还有..

2021-08-15 10:30:08 83

原创 插入排序算法

思想:将元素插入到已经排好序的部分数组中。当元素按照从小到大的顺序排序时,若该元素比前面一个元素大,则已经找到位置,不需要再向前面进行比较,直接退出while循环

2021-08-15 10:02:49 50

转载 堆排序算法

整体思想:从第一个非叶子节点开始将数组初始化为一个大顶堆 大顶堆上第一个元素为最大元素,即数组0号位元素,将该元素放到数组末位上 重新调整大顶堆 继续将数组0号位元素放到倒数第二位置上注意:如果是从大到小排序,则应该使用小顶堆。代码实现重点:调整大顶堆的函数应该传入三个参数,数组,调整起始点,数组长度。 将起始点的值保留,将其赋给子节点(如果子节点大于父节点) 定义指针k指向该节点的左子节点以及左孙子节点等,如果右子节点大于左子节点,则指向右子节点 如果子节点的值大于初始节点的值.

2021-08-13 11:01:51 183

原创 冒泡排序算法

思想:假设,从小到大排序。只需将大的元素往后迁移,通过交换相邻两元素的位置,使得最大的元素放在最后面,第二大的元素放在倒数第二位。import java.util.Arrays;public class BubbleSort { private static void bubbleSort(int[] arr){ int len=arr.length; for(int i=0;i<len;i++){ for(int j=.

2021-08-13 09:44:59 79

原创 剑指66机器人的运动范围

public class JZ6601 { private final static int[][] next={{0,1},{0,-1},{1,0},{-1,0}}; private int cnt=0; private int rows; private int cols; private int threshold; private int[][] digitSum; public int movingCount(int threshold.

2021-07-25 17:22:38 65

原创 剑指65矩阵中的路径

import java.util.*;public class JZ6501 { private final static int[][] next={{0,-1},{0,1},{1,0},{-1,0}}; public boolean hasPath (char[][] matrix, String word) { char[] words=word.toCharArray(); for(int i=0;i<matrix.length.

2021-07-24 18:55:35 66

原创 Linux中的硬链接和软链接

创建一个硬链接会产生一个文件,与原文件有相同的inode值,指向硬盘上相同的空间。当有指针指向硬盘上的该空间,就不会删除该空间里的内容。所以,当有多个文件指向该空间,删除其中一个文件,并不会删除该空间中的内容。硬链接还是有用。 创建一个软链接,也会产生一个文件,但是该文件与原文件的inode值不一样,里面保存的是一个指向原文件的绝对路径。访问该软链接文件时,系统自动将其路径替换为该绝对路径,即不是访问软链接指向的硬盘空间,而是访问绝对路径中文件的硬盘空间。当删除绝对路径中...

2021-07-24 15:31:54 91

原创 JVM垃圾回收机制

判断垃圾的算法一般用引用计数法和可达性分析算法。可达性分析算法中的Gc Root一般是虚拟机栈中引用的对象,方法区(jdk1.8后叫元数据区(Metaspace))中的静态属性或常量引用的对象,本地方法栈中(Native方法)引用的对象。垃圾回收算法有三种,标记清除算法、标记整理算法和复制算法。大部分初始new的对象分配在eden空间,在eden空间中垃圾比较多,为了提高效率,使用复制算法,经过一次MinorGC后,对象存储到Suvivor空间中;大对象和长期存活的对象(Survivo.

2021-07-23 08:26:56 58

原创 java类加载机制和双亲委派机制

类加载机制,执行顺序如下:1.装载:查找和导入类或接口的二进制数据;2.链接:(1)检验:检查导入类或接口的二进制数据的正确性; (2)准备:给类的静态变量分配并初始化存储空间; (3)解析(可略):将符号引用转成直接引用;3.初始化:激活类的静态变量的初始化Java代码和静态Java代码块。双亲委派机制:当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的...

2021-07-22 18:34:38 293

原创 TCP连接中为什么需要三次握手和四次挥手

TCP进行三次握手已经足够保证可靠的连接,第一和第二次握手确保服务器能收到客户端的信息并做出应答,第二次和第三次握手确保客户端能收到服务器的信息并做出应答。 客户端发送syn包(syn=j)到服务器;服务器回应客户端的syn并发送自己的syn包,回应客户端的syn使用ack包(ack=j+1),发送syn包(syn=k)到客户端;客户端向服务器端发送ack包(ack=k+1)回应服务器端的syn包。 四次挥手是因为,服务器端接收到客户端发来的FIN并...

2021-07-22 17:30:11 251 1

原创 数据库读数据出现的问题

三种问题:脏读,不可重复读,幻读脏读:读取了未提交事务修改的数据不可重复读:某一事务读取指定行或列数据时,别的事务修改了该部分行或列的数据。幻读:某一事务读取指定行或列数据时,别的事务却将添加的行或列替换了该部分的行或列,就是说读取到了指定范围之外的数据。四种隔离级别:Read Uncommitted(读取未提交内容),Read Committed(读取提交内容),Repeatable Read(可重读),Serializable(可串行化)可串行化是最高的隔离级别,通过强制事务排序,按

2021-07-21 19:30:52 353

原创 剑指第60题 把二叉树打印成多行

题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树多行打印层序遍历的结果是[[1],[2,3],[4,5]]解题要点:(1)用两种数据结构,ArrayList和LinkedList,ArrayList记录每一行节点的值,LinkedList添加节点,因为queue有先进先出的特点,题目要求从左往右打印,则先添加左子节点。(2)cnt记录每一层的节点数目import java.uti..

2021-07-20 23:33:32 105 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除