- 博客(42)
- 资源 (10)
- 收藏
- 关注
原创 redis.conf
# redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位,# 通常的格式就是 1k 5gb 4m 等酱紫:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes# 1gb => 10
2017-07-24 11:45:12 554
原创 redis和memcached
1. 使用redis有哪些好处?(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,list,set,sorted set,hash,即任何类型的kv结构(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行 (4) 丰富的特性:可用于缓
2017-07-24 11:36:11 333
原创 快速幂算法及其拓展
快速幂算法问题引入:求an(a,n∈N+) 朴素算法:令ans初始值为1,乘n次a得到an 朴素算法时间复杂度:O(n)问题:如果n非常大,比如高达1015,怎么办? 思考:朴素算法哪里可以优化?朴素算法的特点是,连乘过程中底数始终为a,这很不聪明。考虑下例: a=2,n=15 我们没有必要乘15次2,注意到15=23+22+21+20,不妨将215拆分
2017-07-23 21:10:45 383
转载 mybatis常见面试/笔试题
1、#{}和${}的区别是什么?${}是Properties文件中的变量占位符;它可以用于标签属性值和sql内部,属于静态文本替换; 比如${driver}会被静态替换为com.MySQL.jdbc.Driver。 #{}是sql的参数占位符; Mybatis会将sql中的#{}替换为?号;在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号
2017-07-19 15:30:41 787
原创 MyBatis原理
MyBatis是一个基于Java的持久层框架。它提供的持久层框架包括SQLMaps和DataAccessObjects(DAO)。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plai
2017-07-19 15:28:40 515
原创 栈和队列:滑动窗口和数组变树问题
1.滑动窗口问题有一个整型数组 arr 和一个大小为 w 的窗口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。 以数组为[4,3,5,4,3,3,6,7],w=3为例。因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5。第四个窗口
2017-07-19 10:23:45 461
原创 一些智力题
(1)你要在一个nxm的格子图上涂色,你每次可以选择一个未涂色的格子涂上你开始选定的那种颜色。同时为了美观,我们要求你涂色的格子不能相邻,也就是说,不能有公共边,现在问你,在采取最优策略的情况下,你最多能涂多少个格子?给定格子图的长n和宽m。请返回最多能涂的格子数目。思路:按照对角线涂色,可知格子的一半能够涂上颜色。public class Paint {
2017-07-19 09:20:13 753
原创 动态规划9:变态跳台问题
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:分析可知:如果要上n阶台阶,拥有的可能方法数目是:f(n)=f(n-1)+f(n-2)+f(n-3)+……f(1)+f(0);于是从前往后计算出各个项的值就可以,在简单台阶问题中需要保留2个计算结果供后面的计算使用,这里需要保
2017-07-19 08:37:37 350
原创 动态规划8:最优编辑str1-->str2
题目:对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,求出将A串变为B串所需要的最少代价。给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。样例:"abc",3,"adc",3,5,3,100返回:8思
2017-07-19 08:35:06 508
原创 动态规划0-1背包
1.(1)动态规划将问题划分成子问题,在合并的结果。子问题是彼此独立的。(2)动态规划将已计算过的子问题结果保存到表中,是一种以空间换时间的方式。(3)动态规划的初始化条件注意,不要写错。找出递归函数关系式(4)与记忆搜索相比,动态规划的计算具有一定的顺序性,比如b的结果依赖a的结果,要先a在b,而记忆搜索哪个先来就先计算哪个,将其结果保存即可。2、常见的动态规
2017-07-18 16:01:49 417
原创 动态规划7:最长上升子序列LIS
题目:这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。给定一个序列A及它的长度n(长度小于等于500),请返回LIS的长度。样例:[1,4,2,5,3],5返回:3思路:从前向后求出以index为终点的序列的最长递增子序列长度:注意子序列并不要求连续,即子序列不等于连续子序列。例如1,4,2,5,3
2017-07-18 14:59:34 376
原创 动态规划6:台阶问题和矩阵最小路径问题
1.台阶问题有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。为了防止溢出,请将结果Mod 1000000007给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。思路:动态规划问题也可以说是斐波那契数列。如果只有一个台阶f[1]=1,有两个台阶f[2]=2.public class GoUpsta
2017-07-18 11:05:02 798
原创 动态规划5:找零钱问题
题目:有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。样例:[1,2,4],3,3 返回:2(即1 1 1,1 2)思
2017-07-18 10:35:52 6858
原创 二叉树递归练习
(1)题目:请把纸条竖着放在桌面上,然后从纸条的下边向上⽅对折,压出折痕后再展开。此时有1条折痕,突起的⽅向指向纸条的背面,这条折痕叫做“下”折痕 ;突起的面向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上面对折,对折N次。请从上到下计算出所有折痕的面向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".思路:找
2017-07-17 16:59:42 732
原创 comder
Cmder是一款Windows环境下非常简洁美观易用的cmd替代者,它支持了大部分的Linux命令。从官网下载下来一个zip安装包,解压之后运行根目录的Cmder.exe即可,full版的包含msysgit。但是此时会有两个问题,一是ls命令不支持中文,二就是中文提示会有字体重叠现象。1、解决中文乱码问题把一下几行代码添加到config/aliases文件末尾即可解决中文乱
2017-07-17 09:08:00 2193
原创 平衡二叉树AVL
AVL:(1)空树是平衡二叉树(2)所有子树的左右子树的高度差不超过1(1):判断是否为平衡二叉树:public class CheckBalance { public boolean check(TreeNode root) { // write code here if(root==null ) return true;
2017-07-16 19:48:24 225
原创 复杂链表的赋值
链表结构中,每个节点不仅有一条指向下一节点的next指针,同时含有一条rand指针,rand指针可能指向任何一个链表中的节点,请复制这种含有rand指针节点的链表。 方法1.创建一个没有rand时与复杂链表完全相同的链表,然后遍历原链表,给新链表rand复制。方法2.
2017-07-14 16:01:40 1430
原创 链表环的判断,是否相交
1.单链表是否有环题目:判断一个单链表是否有环?有环的话返回进入环的第一个节点的值,无环的话返回-1。如果链表的长度为N,请做到时间复杂度O(N),额外空间复杂度O(1)。 思路:快慢两个指针,快指针一次走2步,慢指针一次走1步。如果两指针相遇则有环。有环后慢指针继续每次一步,快指针从头结点开始每次一步,再次相遇节点为环的入口节点。 public class ChkLoop
2017-07-14 15:47:01 344
原创 *回文链表的判断
题目:如1->2->3->2->1是回文,1->2->3->1不是思路:1.时间复杂度O(n),n个额外空间使用栈Stack,将链表节点从头至尾入栈。然后栈顶和链表元素依次比对,如果节点相同则是回文的。public class Palindrome { public boolean isPalindrome(ListNode pHead) { //
2017-07-14 10:30:50 316
原创 链表相关1
一、链表的分化题目:对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。 思路:该题目也可以将节点放到a[]数组中,进行类似于荷兰国旗问题的处理。这里给出
2017-07-14 08:59:08 288
原创 单链表删节点
题目:只给定链表中的节点node,不给头结点,如何在链表中删除node?实现这个函数,要求时间复杂度O(1)思路:该题当然是说单链表,如果双链表就很容易了。比如单链表 1->2->3->4->5...,现在只知道节点node=3,如何将其删除。把节点4的值拷贝到节点3,然后删除节点4(即node.next拷贝到node,然后删除node.next所对应的节点)该
2017-07-13 16:41:45 416
原创 环形有序链表插入节点
题目:将值为value的节点node插入有序环形链表中(头节点head)思路:分以下情况:(1)head==null,即链表为空,那么node.next=next,返回node。(2)链表不为空,pre=head,cur=head.next;两个同步向后找,直到pre(3)如果没找到(2),node要插入head前面,有两种情况:node>cur,node
2017-07-13 16:00:26 949
原创 大数据--一致性哈希算法
题目:工程师尝试用服务器集群来设计和实现数据缓存,以下是常见的策略。1,无论添加、查询、删除数据,都先将数据ID通过哈希函数转换成哈希值key。2,有N台机器,则 key%N 为该数据所属的机器编号。无论是添加、删除、查询都在这台机器上进行,请分析这种话缓存策略带来的问题,并提出改进方案。思路:该缓存方式弊端:如果增加、删除机器-->那么N会变,根据ID重新计算key,
2017-07-13 15:23:15 1603
原创 大数据和空间限制问题
(一).只用2GB内存在20亿个整数中找到出现次数最多的数【题目】有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数。【分析】通过哈希表对20亿个整数进行词频统计。哈希表的key是32位的整数,value最坏打算是20亿个(4B)所以一条记录是8B。最多20亿条记录,需要的内存远超于2GB!一条记录需要8B存储,当哈希表的记录数为2亿个时,至少需
2017-07-13 10:44:11 633
原创 10亿个IP地址排序、10亿年龄排序
(一).注意:IPV4 的IP地址2^32位约42亿个,占空间4G(二).哈希函数1.哈希函数即散列函数哈希函数的输入域可以是非常大的范围,但是输出域是固定范围。2.哈希函数的性质:a.典型的哈希函数都有无线的输入值域 b.输入值相同时,返回值相同,返回值即哈希值 c.输入值不同时,返回值可能一样,也可能不一样 d.不同输入值得到的哈希值
2017-07-13 10:02:37 4858 3
原创 排列组合问题
一、(1)6*9的方格,左上角起点,右下角终点,请问一共多少种走法?共走13步,5步向右8步向下。C513=C813=1287种public class Robot { public int countWays(int x, int y) { //总共有x+y-2步,其中向右x-1次,向下y-1次 // write code here
2017-07-12 19:10:20 439
原创 位运算相关题目
位运算:& | 按位异或^ 取反~左移右侧补0相当*2: >右移左侧补00:>>> 相关问题:布隆过滤器(1)不安全网页的黑名单里有100亿个数据,每一个网页的URL最多占用64B。要求实现一种过滤系统,可以根据网页的URL判断是否在这个黑名单中。系统允许有万分之一的失误率。且额外的空间不能超过30GB。首先100亿个URL共占 64 * 10 ^10bit 约为
2017-07-12 11:45:01 471
原创 二分查找相关题目
一、注意:(1)有序数组,时间复杂度O(logn) while(low(2)有序循环数组(有序数组左边任意长度移到右边,比如1 2 3 4 5的变形3 4 5 1 2就是有序循环数组。)(3)Mid=(left+right)/2是经典写法,但当left或right特别大时可能溢出,所以安全写法是mid=left+(right-left)/2;(4)二分查找不一定是有序数组的,只要
2017-07-11 21:27:15 835
原创 栈和队列相关题目
一、栈和队列(1)优先级队列:根据元素优先级决定弹出顺序,它的数据结构为堆结构(按照优先级,形成最大堆或者最小堆),并不是线性表结构。(2)深度优先遍历DFS---栈实现,广度优先队列BFS--队列实现 二、题目(1)定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。public class Solution { Sta
2017-07-10 17:44:50 326
原创 字符串相关练习题目
一、字符串问题总结:(1)字符串可以看成字符数组,那么(2)回文字符串(3)大数相加减乘除(4)数组有关的调整、排序(快排划分技巧):(5)字符计数(哈希表 固定长度数组)滑动窗口、寻找无重复字符子串、计算变为词C++字符是0~255,java 是0~65535(6)动态规划:最长公共子串、最长公共子序列、最长回文子串、最长回文子序列(7)搜索类型(str每次只能变
2017-07-10 10:46:11 1460
原创 相邻两数最大差值
有一个整形数组A,请设计一个复杂度为O(n)的算法,算出排序后相邻两数的最大差值。给定一个int数组A和A的大小n,请返回最大的差值。保证数组元素多于1个。 思路:用排序法实现,其时间复杂度为O(NlogN),而如果利用桶排序的思想可以做到O(N),空间复杂度为O(N)。遍历arr找到最大值max和最小值min。如果arr的长度为N,准备N+1个桶,把max单独放在第N+1个桶中,
2017-07-08 09:13:05 1346
原创 最短子数组
题目:对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6返回:21.给定一个无序数组,求出需要排序的最短子数组的长度。例如:arr={1,5,3
2017-07-07 09:34:47 502
原创 荷兰国旗/三色排序
1.荷兰国旗问题:数组只包含0,1,2对其排序(1)首先最简单的就是计数排序,当然这里不讨论,一般情况下考察的都不是这个(2)和快排划分过程相似:时间O(n),空间O(1)。快排划分的时候有个标志位 i=left-1,如果a[j]>x,j++,i++否则j++,,i++,a[j] a[i]互换位置.而该题目可以设置两个标志位,i,j,一个在最左边一个在最右边。对于数组a[0~n-1],
2017-07-06 11:18:50 378
原创 有序数组合并
有两个从小到大排序以后的数组A和B,其中A的末端有足够的缓冲空容纳B。请编写一个方法,将B合并入A并排序。给定两个有序int数组A和B,A中的缓冲空用0填充,同时给定A和B的真实大小int n和int m,请返回合并后的数组。public class Merge { public int[] mergeAB(int[] a, int[] b, int n, in
2017-07-06 10:06:41 199
原创 原地重复值判断
题目:请设计一个高效算法,判断数组中是否有重复值。必须保证额外空间复杂度为O(1)。给定一个int数组A及它的大小n,请返回它是否有重复值。思路:先将数组原地排序,然后查看是否有相邻元素值相同。那么能够实现原地排序且时间复杂度小的是 非递归的堆排序。时间复杂度O(nlogn)空间复杂度O(1)public class Checker { publ
2017-07-06 09:59:14 207
原创 几乎有序数组排序
题目:已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。给定一个int数组A,同时给定A的大小n和题意中的k,请返回排序后的数组。思路:对于该题目,插入排序能够做到很好效果,时间复杂度O(nk),空间复杂度O(1)其次就是选择堆起
2017-07-06 09:38:46 6447 1
原创 排序算法总结
排序总结2、经典算法时间复杂度O(1) 快排的最坏情况:初始是逆序的,时间复杂度为n^2,最好情况每次选择的轴心最均匀,为logn3、空间复杂度:O(1):插入 选择 冒泡 希尔 堆排序O(logN)~O(N):快排。快排这种算法需要栈的支持,栈的大小logn~n,所以最坏情况下为O(logn)~O(n)。每次递归传入参数left、right,平均递归次
2017-07-05 10:41:57 337
原创 桶排序
排序算法总结: 时间空间稳定其他冒泡O(n^2)原地稳定进行n-1次扫描,相邻两个数进行比较,这样第一轮扫描结束后,最大的在最后面;第i次扫描进行n-i次比较;(i=0;i(j=0;ja[j+1] 交换选择O(n^2)
2017-07-04 09:59:38 193
原创 二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路1:由题目可知数组类似一个矩阵形式的,可以从角点出发,当>目标值,向左或者下走;当public class Solution { public boolean Find(int target, i
2017-07-03 22:46:46 445
原创 字符串相关题目
一、判断两个字符串str1和str2,是否互为旋转词(字符串str左边任意长度的子串挪到右边:“1234”的旋转词有1234、2341、3412、4123)。时间复杂度为O(n)做法:(1)判断两字符串长度是否相等(2)长度相等,生成str1+str1的大字符串(大字符串包含了str1的所有旋转词)(3)在大字符串中寻找是否包含str2,可以KMP算法,但本例子没有
2017-07-03 11:10:09 318
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人