面试
白哥学算法
这个作者很懒,什么都没留下…
展开
-
策略模式学习
策略模式模拟鸭子应用使用继承实现使用一个父类,所有的子类都继承其父类以实现鸭子的一些共同行为//鸭子的父类,所有的鸭子都实现该父类public class Duck { //鸭子呱呱叫方法 public void quack(){} //鸭子会游泳 public void swim(){} //展示方法 public void displa...原创 2019-11-20 23:27:11 · 156 阅读 · 0 评论 -
Java线程学习
Java线程学习进程和线程的区别进程是资源分配的最小单位,线程是CPU调度的最小单位。进程可以看作是独立的应用,线程不可以。进程有独立的地址空间,互相不影响,线程只是进程的不同执行路径。线程没有独立的地址空间,多进程程序比多线程程序健壮进程的切换开销比线程大Java进程和线程的关系每运行一个程序就会产生一个进程,进程至少包含一个线程。每个进程对应一个JVM实例,多个线程共享J...原创 2019-07-13 20:55:54 · 212 阅读 · 0 评论 -
剑指offer-正则表达式匹配
题目请实现一个函数用来匹配包括’.‘和’*‘的正则表达式。模式中的字符’.'表示任意一个字符,而 * 表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是"aa.a"和"ab*a"均不匹配解题思路第一步:使用2个指针i,j对应目标数组和匹配数组,2个字符数组分别往后遍历。如果2...原创 2019-09-06 16:39:13 · 115 阅读 · 0 评论 -
剑指offer-构建乘积数组
题目给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-1]。不能使用除法。解题思路第一步:创建一个数组B第二步:循环一次,把B[i]赋值为 A[0] * A[1] * ··· * A[i-1];第三步:从后往前循环一次,把B[i]赋值为B[i] * A[n] * A[n-1] * ...原创 2019-09-06 10:24:29 · 100 阅读 · 0 评论 -
剑指offer-不用加减乘除做加法
题目写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解题思路把2个数当成二进制数来解决。第一步:二进制数的按位相加,不考虑进位,即直接2个数异或。因为如果11,00相加,都为0;第二步:得到二进制数的所进位,即2个数按位与并左移一位。因为,如果11相加,则说明有进位,并且进位要左移一位。第三步:如果进位不为0,则继续重复1,2步,直到进位为0。代码如下...原创 2019-09-04 10:43:37 · 88 阅读 · 0 评论 -
剑指offer-和为S的连续正数序列
题目小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!解题思路第一种:暴力解法1、遍历1到n/2+...原创 2019-09-03 15:42:00 · 117 阅读 · 0 评论 -
剑指offer-数组中只出现一次的数字
题目一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。解题思路使用位运算。如果一个数组只有一个数字出现一次,其他的出现2次,则全部异或剩下的数就是出现一次的数。同理,这题下来,剩下的数即为2个出现一次的数的异或。2个出现一次的数字的异或为1的位置,则说明2个数出现一次的数的该位必然不同,一个为1一个为0。根据此可以把该数组分为2个部分,分别异或...原创 2019-09-02 19:54:53 · 94 阅读 · 0 评论 -
剑指offer-数组中的逆序对
题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007解题思路使用归并排序的想法,把数组分成2个,归并时直接比对2个数组之间,即可得出多少逆序对。随即把2个数组归并排序,合并之后的比较。代码如下import java.util.*;pu...原创 2019-09-01 22:04:40 · 102 阅读 · 0 评论 -
剑指offer-第一个只出现一次的字符
题目在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).解题思路第一步:使用2个长度52的数组,一个用来保存字符的个数,一个用来保存字符的下标第二步:遍历记录个数的数组,找到个数为1,下标最小的值。代码如下public class Solution { public i...原创 2019-08-30 18:26:22 · 128 阅读 · 0 评论 -
剑指offer-丑数
题目把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路丑数都是由2、3、5相乘得来的;之前的丑数*(2、3、5)所能得到的最小值即为新的丑数。例如:第一个丑数是1,第一个丑数 *(2、3、5)中最小的2,即为新的丑数,即第二个丑数。第一步:使用一个数...原创 2019-08-30 16:48:27 · 103 阅读 · 0 评论 -
剑指offer-最小的K个数
题目输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路用快速选择找出第k大的数,前面的就是最小的k个数。代码如下import java.util.*;public class Solution { public ArrayList<Integer> GetLeastNumbers_Sol...原创 2019-08-27 21:27:54 · 117 阅读 · 0 评论 -
剑指offer-二叉搜索树与双向链表
题目输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路第一步:二叉搜索树转为排序的双向链表,必然是使用中序遍历。第二步:使用一个指针,用来从最小值遍历到最大值。第三步:使用递归的中序遍历,之后使当前的值指向下一个值,下一个值指向当前值则可以使其转为双向链表代码如下public TreeNode Convert(T...原创 2019-08-13 21:13:12 · 109 阅读 · 0 评论 -
剑指offer-二叉树中和为某一值的路径
题目输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路直接深度遍历,每次减去当前节点的值,直到叶子节点,判断val是否target,是则说明是一条路径,否则不是。代码如下public ArrayList<ArrayList&...原创 2019-08-13 19:25:52 · 90 阅读 · 0 评论 -
剑指offer-栈的压入、弹出序列
题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路第一步:pushA从头遍历,popA从尾开始;如果pushA[i]==popA[...原创 2019-08-05 21:24:01 · 109 阅读 · 0 评论 -
剑指offer-包含min函数的栈
题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路第一步:使用一个min变量保存栈中的最小值第二步:在每次对栈中进行增删时判断最小值是否改变,如果改变则维护min的值。代码如下Stack<Integer> stack = new Stack<>(); int min = Integer.MA...原创 2019-08-05 19:48:25 · 102 阅读 · 0 评论 -
剑指offer-二叉树的镜像
题目操作给定的二叉树,将其变换为源二叉树的镜像。解题思路递归解法第一步:如果根节点为空,直接结束;第二步:交换2个子结点的位置;第三步:递归子结点。代码如下public void Mirror(TreeNode root) { if (root == null) return; TreeNode temp = root.left; r...原创 2019-08-04 22:48:38 · 103 阅读 · 0 评论 -
剑指offer-树的子结构
题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路以下是使用的递归思路:第一步:如果root2为空,则说明root2是root1的子结构。(这需要一个辅助条件,就是这题目上要求,root2为空即返回false需要排除掉) 如果root1为空,则说明不是root1的子结构。第二步:如果root1和root2不相同,则返回root1的子节点...原创 2019-08-04 15:33:12 · 92 阅读 · 0 评论 -
剑指offer-合并两个排序的链表
题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路第一步:定义一条新的空链表第二步:比较两条链表的表头,把小的接在新链表后面,直到某一条链表为空第三步:把不为空的另一条链表接在新链表后面即可。代码如下public ListNode Merge(ListNode list1,ListNode list2) { Lis...原创 2019-08-04 14:03:23 · 90 阅读 · 0 评论 -
数据库学习笔记,基于mariadb,索引、锁和基本SQL语句
注:这是一个学习笔记,以后可能还会再修改索引模块为什么要使用索引避免全表扫描去查找数据,提升检索效率什么样的信息能成为索引主键、唯一键等能区分数据的字段索引的数据结构主流是B+树,还有哈希结构以及BitMap,其中MySQL不支持BitMap索引,基于InnoDB以及MyISAM的MySQL不显式支持哈希索引密集索引和稀疏索引的区别密集索引文件中的每个搜索码都对应一个索引值稀疏...原创 2019-05-13 16:25:20 · 199 阅读 · 0 评论