自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 源码分析-LinkedBlockingQueue

LinkedBlockingQueueLinkedBlockingQueue是基于链表的阻塞FIFO队列,可以指定一个最大的长度限制以防止过度扩展,未指定情况下其大小为Integer.MAX_VALUE;提供比ArrayBlockingQueue更高的吞吐量但是在高并发条件下可预测性降低。

2016-12-27 10:45:13 2734

原创 leetcode-104. Maximum Depth of Binary Tree

leetcode-104. Maximum Depth of Binary Tree题目:找最大深度,这题我用了一个域变量去做,这样就比较简单了。当然也可以不用但是比较麻烦。

2016-12-27 09:50:40 452

原创 leetcode-103. Binary Tree Zigzag Level Order Traversal

leetcode-103. Binary Tree Zigzag Level Order Traversal题目:和上一题层序遍历很类似,不过要求是Z字型遍历,所以这里用栈,而且需要一个bollean变量来表示方向。

2016-12-27 09:48:30 342

原创 leetcode-102. Binary Tree Level Order Traversal

leetcode-102. Binary Tree Level Order Traversal题目:层次遍历,用FIFO比较合适。新建一个FIFO队列引用,为每一层维护一个FIFO队列然后遍历这个队列,同时添加当前元素和将当前元素的左右子节点分别添加到下一层FIFO队列中。

2016-12-27 09:46:00 335

原创 leetcode-101. Symmetric Tree

leetcode-101. Symmetric Tree题目: > Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree [1,2,2,3,4,4,3] is symmetric:1

2016-12-26 10:13:45 390

原创 leetcode-100. Same Tree

leetcode-100. Same Tree题目: Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have

2016-12-26 10:12:48 436

原创 leetcode-99. Recover Binary Search Tree

leetcode-99. Recover Binary Search Tree题目第二遍刷还是没想起来,这其实是非常漂亮的解法,BST如果先序遍历肯定是递增数列,那么我们的问题就在找到一串递增序列中的2个逆序的位置,然后用指针保存这两个值进行交换。但是一开始确实不容易想到。

2016-12-26 10:11:46 437

原创 leetcode-98. Validate Binary Search Tree

leetcode-98. Validate Binary Search Tree题目:这题本身思路很简单,但是有一个问题我始终解决不了就是当节点是Integer.MIN_VALUE或者Integer.MAX_VALUE的时候。当时做的时候错了很多次,后来看答案才发现原来题目用的是long- -。。确实用long就没有这种问题了。如果在int范围内还是要做很多复杂的判断的。确实是一种典型的解决Integer范围问题

2016-12-26 10:08:42 368

原创 leetcode-97. Interleaving String

leetcode-97. Interleaving String题目:这种题看起来比较难懂,时间上做多了还是套路的题,这样的字符串匹配或者的组合之类的题目,或者说对于有多中情况得到解的情况实际上都应该优先考虑DP算法。我在做这题的时候使用了一个int[][]来保存当前位置匹配的最长字符串,然后如果最右下角的位置匹配的是S3的长度则说明当前完成匹配。看答案似乎大部分人用的是boolean[][]我一开始觉得这种

2016-12-26 10:04:43 469

原创 leetcode-96. Unique Binary Search Trees

leetcode-96. Unique Binary Search Trees题目:其实这题才是标准的DP算法。这题可以这样去想,比如对于3个节点,其节点数相当于左右节点可能的节点数量的情况的之和,比如其左右节点可以分别为[0,2][1,1][2,0]对于这里的情况。我们可以考虑让nums[]分别记录0-n-1之间的所有可能节点数。然后相乘然后求和就是当前nums[n]位置的结果。

2016-12-26 09:58:09 413

原创 leetcode-95. Unique Binary Search Trees II

leetcode-95. Unique Binary Search Trees II题目:这题第二遍做还是没做出来,我总是想怎么用动态规划区解,主要还是偷看了tag。想在n-1的基础上找n很久都没找到。这里实际上并不能算是DP算法。应该还是DFS方法或者分治算法。思路就是针对1-n之间的每个i去找其左子节点和右子节点,分别形成TreeNode数组然后在数组里的互相匹配构成上一层的数组。算法设计的非常漂亮。

2016-12-26 09:53:23 577

原创 leetcode-94. Binary Tree Inorder Traversal

leetcode-94. Binary Tree Inorder Traversal题目:二叉树的前序遍历,这里用的FIFO列表,和一个tmp指针。

2016-12-26 09:45:54 351

原创 leetcode-93. Restore IP Addresses

leetcode-93. Restore IP Addresses题目:这里是典型的回溯法,但是这里有一个有意思的情况就是对于0的处理,因为Integer.parseInt在处理00字符串的时候会处理成0,所以需要在解析之前把00的情况排除掉。这个在提交之前没有注意这个问题。

2016-12-26 09:40:47 487

原创 leetcode-92. Reverse Linked List II

leetcode-92. Reverse Linked List II题目:这里我是先找到首尾指针,然后用一个数组去维护所有需要转换的ListNode的所有指针,然后依次更改就好,用数组比较方便。

2016-12-26 09:36:25 411

原创 leetcode-91. Decode Ways

leetcode-91. Decode Ways题目:做这题的时候我忘记考虑一个问题:比如222,这种情况实际上只有[2,2,2][2,22][22,2]这三种情况,我最开始判断的时候实际上是按照当前的i的数字和i+1的数字来判断的只要是10-26之间都判断c=c*2,这样就是2*2所以是4个。判断出错。所以这里实际上要加一个flag来维护i-1的情况

2016-12-26 09:32:35 359

原创 leetcode-90. Subsets II

leetcode-90. Subsets II题目:典型的回溯法,而且leetcode是很人性化的,给的例子中就说明了可以出现重复的情况,那么典型的方法就是先排序,然后加上一个判断条件,`if(i!=pos && nums[i]==nums[i-1]) continue;`的时候跳过。

2016-12-26 09:26:53 236

原创 源码分析-ArrayBlockingQueue

ArrayBlockingQueue阻塞队列:首先作为阻塞队列的第一个类,这里还是简要说明下阻塞队列。 阻塞队列都是线程安全类,可以通过put和take阻塞在满队列或者空队列上。阻塞队列不允许空元素。 java中阻塞队列有这几类: ArrayBlockingQueue:数组构成的有界阻塞队列固定长度FIFO DelayQueue:是一个无界的队列,只有到达一定延时之后才能被取走。FIFO

2016-12-23 15:55:48 396

原创 源码分析-TreeMap

TreeMap概述首先TreeMap是实现了NavigableMap和SortMap的Map,从实现的角度说是红黑树。红黑树红黑树是平衡搜索树的一种,也是使用最多的一种树,其特点对于所有的动态集合操作都可以保证以最坏O(lgn)的时间复杂度来运行。每个节点都包含一个储存位来表示节点的颜色,非红即黑。通过对任何一条从根节点到叶子节点的简单路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其

2016-12-22 15:01:32 833

原创 leetcode-89. Gray Code

leetcode-89. Gray Code题目:技巧题

2016-12-22 11:07:34 296

原创 leetcode-88. Merge Sorted Array

leetcode-88. Merge Sorted Array题目: 需要注意k并不等于m+n

2016-12-22 11:05:43 221

原创 leetcode-87. Scramble String

leetcode-87. Scramble String题目:这里的基本方法就是累积字符数量,然后对不同的位置做切分去找有没有满足条件的,如果有则直接返回。从方法上来说其实综合了动态规划,hash表和DFT的方法是很好的综合性题目

2016-12-22 11:04:37 340

原创 leetcode-86. Partition List

leetcode-86. Partition List题目: 这题没有什么特别的地方:就是建立哑节点分别指向less和greater,然后根据比较的结果分别增加在这两个节点上。最后再将两个节点合并,但是有一种情况需要注意一下就是在合并最后一个节点的时候需要将其指针指向null,这个我之前没注意到结果超时了。

2016-12-22 11:00:52 312

原创 leetcode-85. Maximal Rectangle

leetcode-85. Maximal Rectangle题目: 针对每一个点计算从该点看到的最左边和最右边的边缘以及高度,这样()右边-左边)*高度就是面积。对每个点算面积就可以得到结果。问题在于如果计算从每个点看到的最大矩形。 这里使用动态规划的方法,维护三个变量数组,以第一行为基础,计算到最后一行。

2016-12-22 10:58:03 451

原创 leetcode-84. Largest Rectangle in Histogram

leetcode-84. Largest Rectangle in Histogram题目: 这里显然的方法是用栈。问题在于栈里是数据存放什么?栈里存放的数据应该是坐标。是比当前的坐标所指定的高度小的前一个i的坐标。因为计算面积时需要按照最小的坐标来算。因此只需要考虑比当前i小的坐标就好。如果当前的坐标比之前的所有的坐标都大,那只需要将当前的坐标压入栈,如果当前坐标比栈顶坐标小则开始算计。

2016-12-22 10:46:14 400

原创 leetcode-83. Remove Duplicates from Sorted List

leetcode-83. Remove Duplicates from Sorted List题目:

2016-12-20 17:03:28 313

原创 leetcode-82. Remove Duplicates from Sorted List II

leetcode-82. Remove Duplicates from Sorted List II题目:基本思路:由于需要删除所有的重复节点所以需要维护三个坐标。两个坐标分别是重复数值的左右两端点,1个指针pre指向左端点的坐边第一个节点。首先新建一个哑节点,然后让pre指向哑节点,然后新建左右节点分别指向head和head.next,然后同时移动着三个节点。如果发现l节点和r节点相同则移动r节点直到r和r

2016-12-20 17:02:12 280

原创 leetcode-81. Search in Rotated Sorted Array II

leetcode-81. Search in Rotated Sorted Array II题目:但是这题有可重复问题的限制。那么会出现一个问题比如说13111这样的情况,左节点右节点和中间节点都是一样的。泛化的说就是无法判断到底是左半部分和右半部分到底哪个是规则的。之所以出现这样的情况。就是因为对于平台区同时存在于左半部分和右半部分,那如何解决这个问题呢我用的方法就是当左节点和右节点相等的时候移动左或右

2016-12-20 16:57:37 395

原创 读书笔记-如何正确的发布并发对象

本文是对《java并发编程实战》第三章对象的共享的整理,并不解释java的并发编程原理,而是说明从编程技巧上如何实现更好的发布对象。当然通常情况下我们考虑如何正确的使用同步组件去写出正确的同步代码,但是即使不适用同步组件也有很多其他方法来保证正确的访问代码。本文主要从线程封闭和不变性的角度考虑如何写出正确的多线程程序。

2016-12-19 21:04:12 870

原创 leetcode-80. Remove Duplicates from Sorted Array II

leetcode-80. Remove Duplicates from Sorted Array II题目:

2016-12-19 10:32:54 258

原创 leetcode-79. Word Search

leetcode-79. Word Search题目: 典型的DFS方法,不过这里还要考虑一下不可重复搜索的问题。之前做的时候没注意到。

2016-12-19 10:31:56 261

原创 leetcode-78. Subsets

leetcode-78. Subsets题目:

2016-12-19 10:30:00 207

原创 leetcode-77. Combinations

leetcode-77. Combinations题目: 这题是一道标准的回溯法,已经做过很多遍了。回溯法的关键就是找到当前层次和下一层次直接的关系。这里的关系就是当前位置一定小于下一位置。

2016-12-18 22:18:50 314

原创 leetcode-76. Minimum Window Substring

leetcode-76. Minimum Window Substring题目L: 说起来比较简单但是实现的过程确比较复杂。而且目前应该也不是最简过程。 首先我先建立一个HashMap表,并累计所有t中的值,然后初始化窗口,如果遍历整s都没有找到合适的窗口则返回""; 然后维护这个窗函数,不断向右移动左窗口,直到其窗口右边达到右边,寻找在此过程中的最小窗口。 返回最小的窗口

2016-12-18 22:14:22 360

原创 leetcode-75. Sort Colors

leetcode-75. Sort Colors题目: 这题的思路很简单,先二分排列找到0和非0,然后在二分找到1,2。

2016-12-18 21:59:56 257

原创 leetcode-74. Search a 2D Matrix

leetcode-74. Search a 2D Matrix题目: 这题有一个可以利用的地方,就是它是从小到大Z字形排列的。所以可以无视格式直接按照普通的二分搜索来做。我自己写的时候是按照行和列分别搜索,总之写的很复杂。这个是仿造讨论写的

2016-12-18 21:57:28 282

原创 leetcode-73. Set Matrix Zeroes

leetcode-73. Set Matrix Zeroes题目: 这里的思路是先从左上到右下遍历,将所有需要需要置零的行和列的首位都置为0,然后再反向遍历将所有首位为0的行和列都置为0。这里还用一个值来表示首行是否需要置零。这也是为什么需要反向的原因。这个设计的非常漂亮。反正我是没想到。

2016-12-18 21:49:26 819

原创 leetcode-72. Edit Distance

leetcode-72. Edit Distance题目: 基本思路就是典型的DP算法。首先构造一个word1.length+1×word2.length+1大小的数组,然后就是分两种情况一种是如果对于[i][j]当word1[i]和word2[j]的位置相同,则相当于位置不变,就是[i][j]=[i-1][j-1];如果不想等则需要通过插入、删除替换来使得word1[0-i]和word2[0-j]相等。分别对应

2016-12-18 21:37:01 530

原创 leetcode-71. Simplify Path

leetcode-71. Simplify Path题目: 这是一道简单题,基本的方法就是先按照"/"来分割,然后用栈。其实用FIFO更好来按照不同的内容来添加或者删除。直到遍历完String数组。

2016-12-18 21:30:28 223

原创 源码分析-HashMap

源码分析——HashMap

2016-12-18 21:08:19 562

原创 日常小结-关于swing某死锁问题的小结

介绍一些一个死锁问题解决的过程。

2016-12-16 17:32:04 553

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除