自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ma_ke_xin的博客

小菜鸡程序猿

  • 博客(104)
  • 资源 (2)
  • 收藏
  • 关注

原创 KMP算法,字符串模式匹配

KMP算法,字符串模式匹配,返回匹配的索引位置KMP算法,又称作“看猫片”算法(误),是一种改进的字符串模式匹配算法,可以在O(n+m)的时间复杂度以内完成字符串的匹配操作,其核心思想在于:当一趟匹配过程中出现字符不匹配时,不需要回溯主串的指针,而是利用已经得到的“部分匹配”,将模式串尽可能多地向右“滑动”一段距离,然后继续比较。朴素的字符串模式匹配算法求一个字符串(模式串)在另一个字符串...

2020-03-11 23:26:01 284

原创 记录知识森林中遇到的问题及解决方法

所需功能:给定一个课程名,获得该课程下所有的主题、分面以及碎片,并且以RDF的形式组织。即主题-分面-碎片。分面就相当于主题与碎片文本之间的一个关系。思考之后,返回数据可以以树型组织,根节点是主题名,然后往下是各级分面,一级分面下面挂对应的二级分面,直到三级分面。只有叶子节点分面才会给挂碎片。由于数据库特别大。在一开始实现的时候,采用的是多次读数据库的方式,每次需要查父分面或子分面时,都是去查数...

2020-03-09 21:08:13 204

原创 最短路径算法——迪杰克斯拉算法/floyd算法

最短路径算法——迪杰克斯拉算法Dijkstra算法的思想1、设置两个顶点集S和T,集合S中存放已经找到最短路径的顶点,集合T中存放着当前还未找到最短路径的顶点;2、初始状态下,集合S中只包含源点V1,T中为除了源点之外的其余顶点,此时源点到各顶点的最短路径为两个顶点所连的边上的权值,如果源点V1到该顶点没有边,则最小路径为无穷大;3、从集合T中选取到源点V1的路径长度最短的顶点Vi加入到集...

2020-03-02 18:08:15 1500

原创 排序函数接口

排序函数接口定义public interface Sorter{ public <T extends Comparable<T>> void sort(T[] arr); public <T> void sort(T[] arr, Comparator<T> comp);}冒泡排序实现public class Bubble imple...

2020-03-01 10:04:59 196

原创 leetcode 无重复字符的最长子串

leetcode 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因...

2020-02-25 20:33:28 173

原创 leetcode 两数相加

leetcode 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 ...

2020-02-25 20:01:30 100

转载 二叉树的前序、中序、后序遍历,非递归java

二叉树的前序、中序、后序遍历,非递归java核心思路是把每一个结点看成父节点,叶子结点是左右孩子是null的父结点。前序遍历思路:使用一个栈来存储结点,以便回到之前的父结点。不断往左子树深入并不断先打印值再入栈直到左叶子的空左孩子弹出栈顶,将指针指向它的右孩子循环1,2步骤直至栈为空且指针也为空(意思是当栈为空但指针不为空时,继续。比如当栈顶元素是二叉树的根节点时,就会出现这种情况,...

2020-02-18 14:44:19 274

原创 生产者消费者模型Java实现

生产者消费者模型首先是共享数据类:在共享数据类里发生生产和消费的行为。生产和消费的时候都要同步。需要使用循环来判断不能生产或不能消费的情况,不能用if判断,否则可能产生虚假唤醒的情况。即就是没有notify就唤醒了wait的线程。可以对整个方法加synchronized或者是对共享变量加。如果是对整个方法同步的话,就是this.wait。如果是对共享变量加同步的话,就是共享变量.wait...

2020-02-17 19:24:56 178

原创 排序算法之选择排序

选择排序选择排序(不稳定)的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。举个栗子,对5,3,8,6,4这个无序序列进行简单选择排序,首先要选择5以外的最小数来和5交换,也就是选择3和5交换,一次排序后就变成了3,5,8,6,4.对剩下的序列一次进行选择和交换,最终就会得到一个有序序列。其实选择排序...

2020-02-17 19:18:45 112

原创 排序算法之快速排序

快速排序快速排序(不稳定)一听名字就觉得很高端,在实际应用当中快速排序确实也是表现最好的排序算法。快速排序虽然高端,但其实其思想是来自冒泡排序,冒泡排序是通过相邻元素的比较和交换把最小的冒泡到最顶端,而快速排序是比较和交换小数和大数,这样一来不仅把小数冒泡到上面同时也把大数沉到下面。举个栗子:对5,3,8,6,4这个无序序列进行快速排序,思路是右指针找比基准数小的,左指针找比基准数大的,交换之...

2020-02-17 19:17:50 115

原创 排序算法之归并排序

归并排序归并排序(稳定)是另一种不同的排序方法,因为归并排序使用了递归分治的思想,所以理解起来比较容易。其基本思想是,先递归划分子问题,然后合并结果。把待排序列看成由两个有序的子序列,然后合并两个子序列,然后把子序列看成由两个有序序列。。。。。倒着来看,其实就是先两两合并,然后四四合并。。。最终形成有序序列。空间复杂度为O(n),时间复杂度为O(nlogn)。public class Merg...

2020-02-17 19:16:20 126

原创 排序算法之插入排序

插入排序插入排序(稳定)不是通过交换位置而是通过比较找到合适的位置插入元素来达到排序的目的的。相信大家都有过打扑克牌的经历,特别是牌数较大的。在分牌时可能要整理自己的牌,牌多的时候怎么整理呢?就是拿到一张牌,找到一个合适的位置插入。这个原理其实和插入排序是一样的。举个栗子,对5,3,8,6,4这个无序序列进行简单插入排序,首先假设第一个数的位置时正确的,想一下在拿到第一张牌的时候,没必要整理。然...

2020-02-17 19:15:02 110

原创 排序算法之堆排序

堆排序堆排序(不稳定)是借助堆来实现的选择排序,思想同简单的选择排序,以下以大顶堆为例。注意:如果想升序排序就使用大顶堆,反之使用小顶堆。原因是堆顶元素需要交换到序列尾部。  首先,实现堆排序需要解决两个问题:  1. 如何由一个无序序列键成一个堆?  2. 如何在输出堆顶元素之后,调整剩余元素成为一个新的堆?  第一个问题,可以直接使用线性数组来表示一个堆,由初始的无序序列建成一个堆就...

2020-02-17 19:13:28 123

原创 排序算法之冒泡排序

冒泡排序冒泡排序是最简单的排序之一了,其大体思想就是通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡向上升一样,因此而得名。举个栗子,对5,3,8,6,4这个无序序列进行冒泡排序。首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。同理4和8交换,变成5,3,4,8,6,3和4无需交换。5和3交换,变成3,5,4,8,6.这样一次冒泡就完了,把最小的数3...

2020-02-17 19:11:30 161

原创 leetcode——Container With Most Water

leetcode——Container With Most Water【题目描述】Given n non-negative integers a1, a2, …, an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of ...

2020-01-12 11:39:52 92

原创 leetcode——Regular Expression Matching

## leetcode ——Regular Expression Matching【题目描述】Given an input string (s) and a pattern §, implement regular expression matching with support for ‘.’ and ‘*’.‘.’ Matches any single character.‘*’ Ma...

2020-01-11 18:01:55 121

原创 leetcode——Palindrome Number

leetcod——Palindrome Number【题目描述】Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.Example 1:Input: 121Output: trueExample 2:Inp...

2020-01-10 22:44:05 129

原创 leetcode——String to Integer (atoi)

leetcode——String to Integer (atoi)【题目描述】Implement atoi which converts a string to an integer.The function first discards as many whitespace characters as necessary until the first non-whitespace ch...

2020-01-09 16:30:47 93

原创 leetcode——Reverse Integer

leetcode——Reverse Integer【题目描述】Given a 32-bit signed integer, reverse digits of an integer.Example 1:Input: 123Output: 321Example 2:Input: -123Output: -321Example 3:Input: 120Output: 21Not...

2020-01-08 10:11:02 76

原创 leetcode——ZigZag Conversion

LeetCode——ZigZag Conversion【题目描述】The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legi...

2020-01-07 10:33:43 90

原创 leetcode——Longest Palindromic Substring

## LeetCode——Longest Palindromic Substring【题目描述】Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.Example 1:Input: “babad”Output: ...

2020-01-06 13:58:11 82

原创 java虚拟机——线程安全

java虚拟机——线程安全java语言中各种操作共享的数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容、线程对立1、不可变:不可变的对象一定是线程安全的。不需要采取任何的线程安全保障措施。2、绝对线程安全:不管运行环境如何,调用者都不需要任何额外的同步措施3、相对线程安全:对该对象单独的操作是线程安全的,在调用时不需要额外的保障措施。对于伊特特定顺序的连续调用,在调用端使用额...

2020-01-01 21:43:45 99

原创 leetcode——Longest Substring Without Repeating Characters

【题目描述】Given a string, find the length of the longest substring without repeating characters.Example 1:Input: “abcabcbb”Output: 3Explanation: The answer is “abc”, with the length of 3.Example 2:...

2019-12-30 22:42:30 53

原创 剑指offer——剪绳子

剑指offer——剪绳子【题目描述】给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n...

2019-12-29 22:13:29 156

原创 java虚拟机——java与线程

java与线程线程的实现1、使用内核线程实现内核线程(KLT),由内核来完成线程切换。程序一般是使用内核线程的一种高级接口——轻量级进程。每个轻量级进程都由一个内核线程支持。轻量级进程的优点:每个轻量级进程都是一个独立的单元,即使有一个轻量级进程在系统调用中阻塞了,也不会影响整个进程的工作。轻量级进程的缺点:基于内核实现的,所以各种线程操作都需要进行系统调用。系统调用的代价相对较高,需...

2019-12-26 12:32:26 98

原创 java虚拟机——java内存模型

java内存模型多任务处理在现代计算机操作系统中必须的原因:计算机的运行速度与他的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O、网络通信或数据库访问上。让计算机并发的执行若干个计算任务,但是大多数的计算任务都不可能只靠处理器“计算”就能完成,处理器至少要与内存交互,如读取运算出具、存储运算结果,这个I/O操作是很难消除的。通过加入一层**高速缓存(Cache)**来作为内存和...

2019-12-26 11:06:29 120 2

原创 剑指offer——矩阵中的路径

## 剑指offer——矩阵中的路径【题目描述】请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"a...

2019-12-25 21:12:12 86

原创 java虚拟机——java与c/c++的编译器对比

java与c/c++的编译器对比大多数程序员都认为C/C++比java快,这种观点是由于java刚出现的时候即时编译技术还不成熟,主要靠解释器执行的java语言性能比较低下。现在的即时编译技术已经成熟,下面对java和C/C++的速度进行讨论。java与C/C++的编译器对比实际上代表了最经典的即时编译器与静态编译器的对比。java虚拟机的即时编译器与C/C++的静态优化编译器相比,由于以...

2019-12-10 10:17:34 547

原创 java虚拟机——晚期(运行期)优化

java虚拟机——晚期(运行期)优化1、解释器与编译器许多商用虚拟机都同时包含解释器与编译器。解释器与编译器两者各有优势。当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多代码编译成本地代码之后,可以获得更高的执行效率。当程序运行环境中内存资源限制较大,可以使用解释执行节约内存,反之可以使用编译执...

2019-12-09 17:18:40 78

原创 剑指offer——滑动窗口的最大值

剑指offer——滑动窗口的最大值【题目描述】给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,...

2019-12-09 13:01:39 73

原创 剑指offer——数据流中的中位数

剑指offer——数据流中的中位数【题目描述】如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。【解题思路】一道很经典的题目就是在1亿个数中找到最大的前100个...

2019-12-08 13:09:25 79

原创 剑指offer——二叉搜索树的第k个结点

## 剑指offer——二叉搜索树的第k个结点【题目描述】给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。【解题思路】因为二叉搜索树其实结点的顺序已经排好了。左边的结点都比根节点小,右边的节点都比根节点大。现在需要寻找第k小的节点,即按照中序遍历方式遍历到的第k个结点。使用非递归的方式中序遍历二叉树,因...

2019-12-07 21:44:25 57

原创 剑指offer——序列化二叉树

## 剑指offer——序列化二叉树【题目描述】请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(v...

2019-12-05 15:47:27 68

原创 java虚拟机——早期(编译器)优化

java虚拟机——早期(编译器)优化前期编译器:把.java文件转变成.class文件的过程。(常说的)虚拟机的后端运行期编译器:把字节码转变成机器码的过程。编译大致分为3个过程:1、解析与填充符号表过程2、插入式注解处理器的注解处理过程3、分析与字节码生成过程解析与填充符号表1、词法、语法分析词法分析将源代码的字符流转变为标记(Token)集合。语法分析是根据Token序列构...

2019-12-03 17:34:44 92

原创 剑指offer——把二叉树打印成多行

剑指offer——把二叉树打印成多行【题目描述】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。【解题思路】借助于两个队列,每层节点使用一个队列存,遍历该层节点的时候把下一层节点存到另外一个队列里。两个队列交替遍历即可。【代码实现】import java.util.ArrayList;import java.util.LinkedList;/** * @Auth...

2019-12-03 14:53:04 52

原创 java虚拟机——虚拟机字节码执行引擎

java虚拟机——虚拟机字节码执行引擎栈帧栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构。每一个方法从调用开始到执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。栈帧包含:局部变量表、操作数栈、动态连接、方法返回地址和一些额外的信息。在编译时期,多数操作数栈已经完全确定并写入方法表的Code属性。因此一个镇站需要分配多少内存不会受到程序运行期变量数据的影响。1、局部...

2019-12-02 20:19:58 105

原创 剑指offer——按之字形顺序打印二叉树

## 剑指offer——按之字形顺序打印二叉树【题目描述】请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。【解题思路】使用两个栈,一个栈p存放奇数层从左到右顺序的,一个栈q存放偶数层从右到左顺序的。遍历奇数层时,按照从左到右的顺序,按照左右孩子的顺序将下一层的节点放到p中。由于是栈,所以到遍历...

2019-12-02 16:56:10 57

原创 剑指offer——对称的二叉树

剑指offer——对称的二叉树【题目描述】请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。For example, this binary tree is symmetric:1/ 2 2/ \ / 3 4 4 3But the following is not:1/ 2 2\ 3 ...

2019-12-01 20:46:47 70

原创 java虚拟机——虚拟机类加载机制

java虚拟机——虚拟机类加载机制类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Jave类型。类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期:加载——连接(包括:验证、准备、解析)——初始化——使用——卸载其它类加载过程都是按部就班的开始,但是解析阶段不一定:在某些情况下可以在初始化阶段之后开始,...

2019-11-30 22:04:30 84

原创 java虚拟机——类文件结构

java虚拟机——类文件结构1、各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码2、实现语言无关性的基础是虚拟机和字节码存储格式。java虚拟机不和包括java在内的任何语言绑定,只与“class文件”这种特定的二进制文件所关联。Class文件中包含了java虚拟机指令集和符号表以及若干其它辅助信息。3、Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照...

2019-11-30 19:30:01 113

chromedriver 适合谷歌浏览器65 python

chromedriver 适合最新版谷歌浏览器65。将该exe文件复制到python的安装路径下即可

2018-03-21

空空如也

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

TA关注的人

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