- 博客(55)
- 收藏
- 关注
原创 剑指之构建乘积数组
题目描述给定一个数组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[i]=A[0]A[1]…*A[i - 1]A[i + 1]…*A[n - 1]分为两部分:第一部分:A[0]A[1]…A[i - 1]第二部分:A[i + 1]… A[n - 2] *A[n - ...
2019-08-02 23:40:48 161
原创 剑指之二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向非递归/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {...
2019-08-02 22:56:30 128
原创 BIO、NIO、AIO
在说BIO,NIO,AIO 之前先来看这样几个概念:同步与异步,阻塞与非阻塞同步与异步同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果阻塞和非阻塞阻塞: 阻塞就是发起一个请求,调用...
2019-08-02 03:25:48 291
原创 死锁详解
死锁互相等待对方释放锁死锁的条件互斥条件资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用。不可剥夺条件进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放请求和保持条件进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源循环等待条件若干进程间形成首尾相接循环等待资源的关系死锁处理方...
2019-07-31 20:31:41 370
原创 剑指之序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树思路序列化:用前序遍历,用字符串保存结点值,如果是空结点,用null表示,依次:根左右反序列化:按照前序顺序,递归的使用字符串中的字符创建一个二叉树/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = n...
2019-07-31 19:45:15 127
原创 快速排序java
//快速排序public class quickPaixu { //优化:选取左中右三个元素,求出中位数, 放入数组最左边的a[low]中private static int selectMiddleOfThree(int[] a, int low, int high) { int middle = low + (high - low)/2; // 取得位于数组中...
2019-07-29 01:18:05 134
原创 大根堆 java
完全二叉树完全二叉树是指从根结点到倒数第二层全部填充,最后一层可以不完全填充,其叶子结点都靠左对齐,如果结点的度为1 ,则该结点只有左孩子一棵完全二叉树,分为大根堆和小根堆大根堆:根结点最大,q其它结点满足 根结点>左结点>右结点小根堆:根节点最小,其他结点满足 根结点<左结点<右结点我们采用用数组存储节点,当前节点为i时计算:父结点(i+1)/2,子女结点:2...
2019-07-29 01:06:39 789
原创 基于 LinkedHashMap实现LRU缓存机制
LRU缓存机制LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”HashMap实现LRU缓存机制思想用LinkedList来做缓存,每次调用get、put方法时,都此节点放在链表的尾部当链表满的时候,将链表首部的数据丢弃参考链接:https://blog.csdn.ne...
2019-07-27 21:52:05 834 3
原创 剑指offer 把二叉树打印成多行
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNod...
2019-07-25 00:58:04 82
原创 剑指之删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/* public class ListNode { int val; ListNode next = null; ListNode(int val)...
2019-07-24 23:41:53 92
原创 剑指之和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?思路首先我们用low和high分别表示序列的最小值和最大值,把...
2019-07-24 01:56:55 79
原创 剑指之二叉搜索树的第k个结点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4思路二叉搜索树的特性:左<根<右解题首先想到:用中序遍历(左根右)即可拿到从小到大的序列在中序遍历过程中,只要节点不为null,即count++,知道count==k时,返回当前节点/*public class TreeNode ...
2019-07-24 01:18:15 80
原创 剑指之数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007//此题思路类似于归并排序,把数组不断地分解,直到长度为1,然后把相邻的子数组合并,再合并过程中判断public class Solution { public static i...
2019-07-24 00:08:36 71
原创 归并排序
public class mergeSort { //一个拆分函数 public void sort(int[] a, int left, int right) { if (left == right) { return; } int mid = (left + right) / 2; sor...
2019-07-23 23:27:53 117
原创 剑指之翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?public class...
2019-07-23 17:09:40 84
原创 剑指之左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路把字符串分为两部分,假设n为3,要把前三个字符移到后面,就把这两个字符分到第一部分,剩下的...
2019-07-23 16:17:43 109
原创 剑指之把字符串转换成整数
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例1输入复制+21474836471a33输出复制214...
2019-07-22 17:06:48 95
原创 剑指之字符流中第一个不重复的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。import java.util.HashMap;public class Solution { HashMap<Character,Integer> map = ...
2019-07-22 16:43:25 96
原创 剑指之二叉树中和为某一值的路径
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)/** 减法public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = ...
2019-07-22 16:18:11 101
原创 剑指之二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度//递归实现:如果根节点的只有一个子节点,则对应的子节点+1;如果两个节点都存在,比较两个子树的深度,深度大的+1,返回;/**public class TreeNode { int val = 0; TreeNode left = null; Tre...
2019-07-22 15:42:41 105
原创 剑指之数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数//时间复杂度O(n)public class Solution { public int GetNumberOfK(int [] array , int k) { int count=0; for(int i = 0; i<array.length; i++){ if(array[i] ==...
2019-07-22 15:19:12 84
原创 剑指之数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2public class Solution { // Parameters: // numbers: a...
2019-07-21 23:39:06 144
原创 剑指之和为S的两个数字
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ...
2019-07-21 17:29:40 79
原创 剑指之两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.util.Stack;public class Solution { pub...
2019-07-21 16:32:15 85
原创 剑指之连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会...
2019-07-20 23:55:55 71
原创 剑指之第一个只出现一次的字符
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).//最容易想到,也最复杂的方法(不建议)public class Solution { public int FirstNotRepeatingChar(String str) { if (str.length...
2019-07-20 22:57:02 74
原创 剑指之从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = ...
2019-07-20 20:32:31 82
原创 数组中只出现一次的数字
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设置为返回结果public class Solution { public void FindNumsAppearOnce(int [] array,int num1[] , int num2[]...
2019-07-19 22:59:46 81
原创 剑指之二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public clas...
2019-07-19 19:43:27 65
原创 剑指之树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;...
2019-07-19 19:24:54 69
原创 剑指之栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)import java.util.Stack;public class Solution {...
2019-07-19 02:52:48 88
原创 剑指之包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))import java.util.Stack;public class Solution { private Stack<Integer> stack = new Stack<Integer>(); private Stack<Integer> ...
2019-07-19 02:37:59 80
原创 数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方public class Solution { static boolean b = false; public double Power(double base, int exponent) { if (equal(base, 0)) ...
2019-07-19 02:07:59 153 1
原创 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。import java.util.*;public class Solution { public int MoreThanHalfNum_Solution(in...
2019-07-19 02:07:37 72
原创 剑指之矩形覆盖
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?public class Solution { public int RectCover(int target) { if (target < 3) { return target; } ...
2019-07-18 19:38:39 100
原创 二进制中1的个数
剑指offer之二进制中1的个数public class Solution { public int NumberOf1(int n) { int count = 0; while (n != 0) { ++count; n = (n - 1) & n; } retu...
2019-07-18 02:26:59 121
原创 斐波那契数列
剑指offer之斐波那契数列大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39public class Solution { public int Fibonacci(int n) { if (n < 2) { return n; } ...
2019-07-18 02:18:02 82
原创 青蛙跳台阶
剑指offer之青蛙跳台阶//一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)public class Solution { public int JumpFloor(int target) { if (target < 3) { return target; ...
2019-07-18 01:54:29 133
原创 旋转数组的最小数字
剑指offer之旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0import java.util.ArrayList;public class Sol...
2019-07-18 01:46:18 74
原创 用两个栈实现队列
剑指offer之用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack...
2019-07-18 01:34:38 84
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人