- 博客(44)
- 收藏
- 关注
原创 VIM使用总结
vim使用h j k l (光标移动方向:左 下 上 右)删除操作输入 d$ 从当前光标删除到行末输入 dw 从当前光标删除至单字/单词末尾输入 dd 可以删除整一个当前行: [num] [enter] - 到文档指定行翻页/上(下)一个单词ctrl-F/B 下翻页(上翻页)下一个单词 w上一个单词 b粘贴复制yy 复制光标所在行3yy 复制光标所在下面3行y^ 复制至行首,
2018-01-03 17:15:08 213
转载 二叉查找树变为有序的双向链表
将二叉查找树变为有序的双向链表 要求不能创建新节点,只调整指针。 /** * * 递归解法: * 参考了http://stackoverflow.com/questions/11511898/converting-a-binary-search-tree-to-doubly-linked-list#answer-11530016 * 感觉
2017-09-28 17:41:32 326
转载 二叉树相关算法
/* * 判断两棵二叉树是否相同的树。 * 递归解法: * (1)如果两棵二叉树都为空,返回真 * (2)如果两棵二叉树一棵为空,另一棵不为空,返回假 * (3)如果两棵二叉树都不为空,如果对应的左子树和右子树都同构返回真,其他返回假 * */ public static boolean isSam
2017-09-28 15:48:10 280
转载 spring支持五种事务隔离和六种事务传播属性
spring支持五种事务隔离设置,具体介绍如下: DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 . READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 ) READ_COMMITTED 会出现不可重复读、幻读问题(锁定正在读取的
2017-09-12 18:37:47 341
转载 ThreadLocal使用
ThreadLocal不是为了解决多线程访问共享变量,而是为每个线程创建一个单独的变量副本,提供了保持对象的方法和避免参数传递的复杂性。ThreadLocal类的基本方法: (1) void set(Object value)设置当前线程的线程局部变量的值。 (2) public Object get()该方法返回当前线程所对应的线程局部变量。 (3) public void re
2017-09-12 15:35:46 259
转载 Minor GC和Full GC触发条件总结
Minor GC ,Full GC 触发条件Minor GC触发条件:当Eden区满时,触发Minor GC。Full GC触发条件:(1)调用System.gc时,系统建议执行Full GC,但是不必然执行(2)老年代空间不足(3)方法去空间不足(4)通过Minor GC后进入老年代的平均大小大于老年代的可用内存(5)由Eden区、From
2017-09-12 14:47:48 2087
转载 redis 提供 6种数据淘汰策略:
redis 提供 6种数据淘汰策略:volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选
2017-09-12 14:19:40 480
转载 mysql索引的区别
组合索引(最左前缀)ALTER TABLE article ADD INDEX time(title(50),time(10))相当于创建了两组组合索引(1)title time(2)titleFULLTEXT全文索引,目前只有MyISAM引擎支持,目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。它的出现是为了解决WHERE name LI
2017-09-09 11:05:47 190
转载 java的jdk动态代理和cglib动态代理区别
java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用C
2017-09-09 10:46:00 4016
转载 http请求的方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。1GET请求指定的页面信息,并返回实体主体。2HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
2017-09-08 22:31:50 317
转载 优化mysql查询的方法
优化mysql查询的方法1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中使用!=或3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null
2017-09-08 10:57:25 171
转载 PriorityQueue详解
PriorityQueue优先队列本质上就是一个最小堆,它的每个父节点都比两个子节点要小,但是整个数组又不是完全顺序的。不是线程安全的。优先级队列不允许 null 元素,此队列按照在构造时所指定的顺序对元素排序,既可以根据元素的自然顺序来指定排序(参阅 Comparable),也可以根据 Comparator 来指定,这取决于使用哪种构造方法。此队列的头是按指定排序
2017-09-06 17:28:17 403
原创 【算法】判断一棵二叉树是否是平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。分析:根据左右树的树高差距是否大于1,递归判断左右子树。public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {
2017-09-06 16:43:40 456 1
原创 【算法】使用大根堆,解决top_k问题
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 public static ArrayList GetLeastNumbers_Solution(int [] input, int k) { ArrayList list=new ArrayList();
2017-09-06 16:18:19 788
原创 【算法】求一个数组中的逆序对数
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007分析:最简单的解法就是遍历数组中的每一个元素,让每个元素与后面的元素对比,如果大于则逆序对数count++,但是时间复杂度是o(n2)比较好的思路是利用分治的思想:
2017-09-06 11:51:28 1647
原创 【算法】求两个数中,bit位不同的个数
static int calculateNotSam(int a,int b){ int temp=a^b; int number=0; while(temp!=0){ temp&=(temp-1); number++; } return number; }
2017-09-05 10:53:43 1240
原创 【算法】欧几里德、毕达哥拉斯、帕斯卡和蒙特去公园已知三点组成平行四边形,求第四点
public static void main(String[] args) { /* char [][]positionInpark={ {'-','-','-','-','-','-','-','-'}, {'-','+','-','-','-','-','-','-'}, {'-',
2017-09-03 15:56:29 2512
原创 【算法】变态跳台阶问题
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:如果青蛙只跳1或2个台阶,则可以得出是a[n]=a[n-1]+a[n-2],那么如果能跳1,2,3,......,n个台阶时a[n]=a[n-1]+a[n-2]+a[n-3]+......+a[0]。根据此递推公式,可得以下算法:
2017-09-02 12:19:06 295
原创 【算法】求二叉树的镜像树
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5
2017-08-30 16:43:56 298
原创 【算法】判断输入是否是树的子数
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析:首先找到A中结点的值与B相等的结点,然后从这两个相同的结点出发,判断是否存在重合,若是返回true。否则,在树A的左右子树中寻找与B结点值相同的结点,以这些结点出发递归判断是否是A的子树。public class TreeNode { i
2017-08-30 16:25:01 230
原创 【算法】字符串循环左移K位
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思想:先把public static String LeftRot
2017-08-29 17:14:30 1174
原创 【算法】判断是否是二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析:对于一棵二叉排序树,存在特点:根结点的左子树都小于根结点,根结点的右子数都大于根结点。后序遍历最后访问的是根结点,因此,对于一个整数数组,最后一个元素肯定是根结点,并且如果前部分(左子树)都小于最后一个元素(根结点),后部分(右子树)都大于最后一个...
2017-08-29 15:31:17 341 2
原创 【算法】求二叉搜索树的第K个结点
题目描述给定一颗二叉搜索树,请找出其中的第k大的结点。分析:已知二叉搜索树的中序遍历就是有序序列,因此使用中序遍历思想(可递归,也可不递归),访问第K个结点即为所求的第K大的结点。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right =
2017-08-28 16:16:43 214
原创 【算法】对称二叉树的判断
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。题目分析:递归思想,如果一棵树根结点为空则返回true,否则递归判断左子树和右子数是否对称,对称即各从某一相同结点出发,判断一棵树的左结点和另一棵树的右节点是否相同、一棵树的右节点和另一棵树的右节点是否相同。boolean isSymmetr
2017-08-28 15:23:59 262
原创 【算法】求二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题目分析:三种情况:1.如果二叉树为空,则返回空值; 2.如果节点右孩子存在,从右孩子出发,一直沿着指向其左子数结点的指针找到的叶子节点即为下一个节点; 3.如果节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其
2017-08-28 14:48:32 156
原创 【算法】删除相邻的重复元素
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution { public ListNode deleteDuplication(ListNode pH
2017-08-28 11:45:14 2067
原创 【算法】找到只出现一次的第一个字符
题目描述在一个字符串(1import java.util.*;public class Solution { public static int FirstNotRepeatingChar(String str) { if(str.length()==0) return -1; HashMap h=ne
2017-08-27 21:55:25 184
原创 【算法】列表反转
题目描述输入一个链表,反转链表后,输出链表的所有元素。代码如下:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution {
2017-08-27 19:20:01 408
原创 【算法】求链表中倒数第K个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路:设置两个指针,相距K,两指针同时向后移动,若后指针移动到链表尾部,则前一个指针就指向第K个。代码如下:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.v
2017-08-27 18:53:05 209
原创 【算法】求数值的整数次方
题目描述:求base的exp次方,其中base可以是double,exp为整数(可正,可负,可零)思路解析: public int JumpFloor(int target) { if(target==0) return 0; else if(target==1) return 1; else if(
2017-08-27 16:19:47 278
原创 【算法】跳台阶问题
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:类似斐波那契额数列,当目标为0时,有0种跳法,目标为1,只有一种。目标为2,有0->1->2或者0->2两种。其他情况跳法是上一次距离目标一个台阶时和距离目标两个台阶时次数的总和。代码如下: public int JumpFloor(int target) {
2017-08-27 16:15:37 211
原创 【算法】用两个栈模拟实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题目分析:根据队列先入先出的特点,入栈时插入到stack1中。当需要出栈时,如果stack2为空,则根据栈的特点,先进入的肯定位于栈底,因此将stack1中的逐个出栈,并放入stack2中,并输出stack2的栈顶即可。若stack2不空时,直接出栈stack2栈顶元素。imp
2017-08-27 16:02:12 399
原创 【算法】数组中出现次数超过一半的数字
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如{2,1,3,2,2,2,2,5,4,2,2,2,2},由于数字2的个数超过了数组长度的一半,则输出2.解题思路1:数组排序后有一个特征:数组中如果有超过一半长度的数字,则排序之后位于数组中间的数字一定是超过一半的数字。也就是中位数。受快速排序的启发,随即找出一个数字,如果其最终位置位于n/2,则这
2017-08-27 13:05:37 233
原创 【算法】n根彩色粉笔,m根白色粉笔,粉笔组合,求利益最大化
题目:一共n根彩色粉笔,m根白色粉笔,可用a根白色和b根彩色组成一盒买x元,c根白色组成一盒买y元,或d根彩色组成一盒z元。最多用这些粉笔买多少钱,可以有剩余,只求利益最大化。输入:第一行2个整数n,m(1到2000)第二行4个整数a,b,c,d(1到1000)第三行3个整数x,y,z(1到1000)例,输入:5 51 2 3 32 1 3例,输出 :7
2017-08-27 12:21:11 625
原创 【算法】求连续子数组的最大和
public static void main(String[] args) { Scanner in = new Scanner(System.in); String a=in.nextLine(); String b[]=a.split(" "); int temp[]=new int[b.length];
2017-08-27 12:10:14 191
原创 JVM垃圾回收算法
垃圾收集(Garbage Collection,GC),垃圾回收之前首先要判断对象是否“已死”,判端的算法如下:(1)引用计数算法给对象中添加引用计数器,每次引用,计数器就加1;引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。但是存在的问题是无法解决对象间循环引用的情况。(2)可达性分析算法从一系列的“GC Roots”出发,向下搜索,搜索所走过的路径
2017-08-23 18:40:49 138
原创 JVM内存管理机制
JVM内部结构图:线程所共享的内存区域有:方法区和堆线程独有的内存区域有:程序计数器、本地方法区栈和虚拟机栈。程序计数器(Program Counter Register)内存空间较小,是当前线程所执行的字节码的行号指示器。为了线程切换后还能返回到指定位置,此区域是线程私有的内存,各个线程之间互不影响,不会出现OOM问题。程序执行中的循环、跳转、异常处理等基
2017-08-23 17:34:05 257
原创 [算法]行列递增数组中查找某个元素
在一个从上到下递增,从左到右递增的数列中,判断某个数是否在这个数组中。例如:1 2 4 72 3 5 84 5 6 9解题思路:从第一行的最右面开始(上面示例中的7),如果大于7则说明在第一行的下面(i++)排除7所在的行,如果小于7则说明在最后一列的左边(即j--)排除7所在的列,同时注意i,j的边界不要超范围。
2017-08-23 16:41:27 748
原创 linux脚本日期每次递减一天
循环从指定日期到另一日期,每次减少一天,对于其中的每一天调用脚本#!/bin/shdate1="2017-05-19"date2="2016-12-26"tempdate=`date -d "-0 day $date1" +%F`enddate=`date -d "-0 day $date2" +%F`tempdateSec=`date -d "-0 day $date1" +%
2017-08-23 15:18:19 2047
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人