- 博客(18)
- 资源 (1)
- 收藏
- 关注
原创 初探Disruptor
Disruptor简介Disruptor 是一个用于在线程间通信的高效低延时的开源框架,它被用在了LMAX系统中。这个系统是建立在JVM平台上,核心是一个业务逻辑处理器,官方号称它能够在一个线程里每秒处理6百万订单。Disruptor的设计似乎和BlockingQueue相近(生产者—消费者),但是 Disruptor能够在无锁的情况下实现Queue并发操作,也就是 Disruptor实际上是...
2019-01-04 20:38:57
324
1
原创 分布式学习之一致性协议:2PC和3PC
分布式学习之一致性协议:2PC和3PC一致性协议之2PC2PC是 Two-Phase Commit的缩写,即两阶段提交 ,主要目的就是为了保证分布式系统数据的一致性。二阶段提交就是讲事务的提交过程分成了两个阶段来进行处理。流程如下:阶段一: 提交事务请求事务询问: 协调者向所有的参与者询问,是否准备好了执行事务,并开始等待各参与者的响应。**执行事务:**各参与者节点执行事务操作,并将...
2018-11-28 23:11:24
218
原创 分布式学习之CAP和BASE理论
分布式学习之CAP和BASE理论从集中式到分布式集中式:由一台或者多台主计算机组成主节点,数据存储于中心节点之中,并且整个系统所有的业务单元都集中部署到这个中心节点之上,系统所有的功能均有其集中处理。换句话说,就是在集中式系统中,每个终端或者客户端只负责数据的录入和输出,而数据的存储和控制完全交由主机处理。集中式系统最大的特点就是部署结构简单,由于集中式系统往往基于底层性能卓越的大型主机,因此...
2018-11-28 23:08:01
228
原创 leetcode第51题 N-Queens
N皇后问题是一个非常经典的问题,即如何能够在N*N的棋盘上放置N个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。注意仅当 N= 1 或N≥ 4 时问题有解。 解题思路这个问题依然可以用递归来解决。由于每一行只能放置一个皇后,所以可以尝试在从每一行的N个位置上尝试放置皇后,直到放满N个皇后。在尝试的过程中,维护三个数组表示该位...
2018-04-08 22:19:14
207
原创 leetcode 第77题 Combinations
题目要求给定两个整数n和k,返回1 … n中所有可能的k个数的组合。例如下图: 解题思路对于1到n个整数进行k个组合,可以这样构造一个递归树,对与 整数i来说,只要能从i到n中找到k-1个元素即可,在这个递归过程中记录递归结果,等记录到k个结果时,就返回。JAVA代码class Solution { List<List<Integer>>...
2018-04-08 21:53:43
281
原创 leetcode 第46题和第47题 全排列问题
leetcode 第46题和第47题 都是求一个给定数组中的全排列问题,不同之处在于47题中数组的元素可以重复。leetcode 第46题 解题思路这也是一个递归问题。对于数组中的每个元素,它的全排列就等于它本身加上除它以外所有的全排。所以只要这样依次计算全排列就行。JAVA代码实现class Solution { List<List<Integ...
2018-04-08 21:41:07
1528
2
原创 leetcode 第17题 Letter Combinations of a Phone Number
题目要求给定一个数字字符串,返回数字可能表示的所有可能的字母组合。 数字到字母的映射(就像在电话按钮上一样)在下面给出。 例如: 输入字符串 “23”,输出结果为: “ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”。解题思路这是一个典型的可以用递归解决的树形问题。对于每个数字,都分别代表了几个字母。组合在一起就变成了一个...
2018-04-08 21:08:48
201
原创 二叉搜索树(BST)的相关问题
前言:在二叉搜索树中,对于每个结点,它的所有左子树结点的元素小于当前节点数据,所有右子树结点大于当前结点。 二叉搜索树的三种常见操作:查找、删除、插入。查找在查找操作中,就可以看到二叉搜索树的优势,它的时间复杂度为O(lg n).//查找 public TreeNode find(TreeNode root,int data){ if(root == null) ...
2018-04-01 22:14:52
239
原创 leetcode 第235题 和 第236 题:Lowest Common Ancestor
前言:第235题 和 第236 题都是求解一棵树中两个结点最近公共祖先(LCA)问题,但是不同之处在于235给出的树为一棵二叉搜索树(BST),而236是一颗一般的二叉树,这样的话在235中利用BST的性质可以很方便的解决问题,但是在236中就必须全面考虑。 一般而言,找一棵树的LCA可以分为三种情况:俩个结点分别在LCA的不同子树,两个结点中的一个就是LCA。第235题 Lowest ...
2018-04-01 21:11:09
480
原创 leetcode 第19题 Remove Nth Node From End of List
题目要求给定一个链表和一个整数n,移除链表的倒数第n个节点 假设给定的整数n在链表的范围内。解题思路如果先将链表遍历一遍,很容易移除数第n个元素。但是如果只能遍历一遍时,有一个很巧妙的办法是设置一个快指针,一个慢指针,当快节点到达链表末尾时,慢指针刚好到达倒数第n+1个节点。要实现这种思路,只要先将快指针移动n+1次,然后两个一起移动即可。JAVA代码实现/** * D...
2018-03-25 22:02:12
119
原创 基于链表的归并排序
归并排序基本介绍归并排序排序是一种常用的时间复杂度为O(n*lg n)的算法,它的基本想法是先对数据不断二分,然后对分开的每段数据进行合并,利用递归的思想,很容易完成排序。归并排序又分为自顶向下和自底向上两种实现方式,自顶向下实现起来比较简单,就是递归,对数据进行二分和合并。对与自底向上而言,,则需要考虑到每次归并元素的个数。 这里要注意的是,对与每次归并来说,必须保证链表的完整性,不能出现...
2018-03-25 21:37:25
670
原创 基于链表的插入排序
插入排序的基本介绍插入排序的时间复杂度为O(n*n),但是在 给定数据近乎有序的情况下,它的时间复杂度可以接近O(n).它的基本思想是对于当前的节点。不断与该节点前面节点进行比较,直到它前面的数据小于它。如下图所示: 对元素2进行排序时,只要往前一直找,就可以将它插入合适的位置。 插入排序基于数组很容易实现,原因在于我们可以很方便的找到每一个位置上的数据。但是链表不能这么做,原因在于很...
2018-03-25 21:15:43
242
原创 leetcode 第149题 Max Points on a Line
题目要求:给定2D平面上的n个点,找出位于同一条直线上的最大点数。解决思路这个问题的一种方案是考虑两点之间斜率,把斜率相同的点放置在一个表中,再找到包含最多点的斜率。这个其中有两点需要关注,一个是点坐标的取值范围,一个是涉及斜率计算的问题。 我的想法是对于每一个点,分别计算在它之后的所有不同点的斜率,并且用一个Map集合存起来,对于这个点,找出斜率最大的那个。考虑它的正确性,我们...
2018-03-18 20:58:29
192
原创 leetcode Two Sum问题
Two Sum ITwo Sum II - Input array is sorted第1题 Two Sum I题目要求: 给定一个整数数组,返回这两个数字的索引,使它们合计成一个特定的目标。 限定条件: 返回值为这两个数字的索引,索引从0开始 假定每个输入都只有一个解,且不能使用相同的元素两次解决思路由于数组有序,故采用对撞指针的方...
2018-03-18 20:19:36
397
原创 leetcode76题 Minimum Window Substring
最小窗口子字符串 题目要求:给定一个字符串S和T,在S中找到一个包含T中所有字符的最短字串,时间复杂度为O(n). 注1:如果这个窗口不存在,返回一个空字符串 注2:该题保证在S中总是只有一个唯一的最小窗口解决思路定义Java语言解决方案class Solution { public String minWindow(String s, String t) {
2018-03-11 20:16:31
171
原创 算法中时间复杂度分析
算法的时间复杂度表示算法运行所需要的时间大O表示法递归算法中时间复杂度分析大O表示法大O表示法 是一种体现算法时间复杂度的记法,如果用n表示数据规模,那么O(f(n)表示算法说需要执行的指令数(消耗的时间)和 f(n) 成正比。大O表示法指出了算法执行的最低上限。(大O表示法的前边省略了一个常数)。 例子:有一个字符数组,将数组中的每一个字符串按照字母排序,再将整个字...
2018-03-05 10:47:54
581
原创 判断链表成环,且找出环的起点
判断链表成环,且找出环的起点。判断链表成环找出环的起点Java代码实现1. 判断链表是否成环 Floyd环判断法:从同一个起点同时开始以不同速度前进的2个指针最终相遇,那么可以判定存在一个环。设想:乌龟和兔子在同一个环上赛跑,跑的快的兔子速度为2,跑的慢的乌龟速度为1,则兔子终会赶上乌龟。理解:如果以乌龟为参考对象,则兔子前进的速度为1,这就意味着,兔子必...
2017-11-28 21:14:00
5328
2
原创 利用Python模拟淘宝自动登录
from selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitimport timeimport urllib2 from bs4 import BeautifulSoupimport requestsimport random#设置代理IPdef get_ip_random():
2017-11-08 20:51:43
2214
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人