自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HxxxxxxU的博客

IT男一枚

  • 博客(18)
  • 收藏
  • 关注

原创 ConcurrentHashMap的JDK1.7和JDK1.8的实现

JDK1.7 ConcurrentHashMap(支持并发)ConcurrentHashMap 是一个 Segment 数组,Segment 通过继承 ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个 Segment 是线程安全的,也就实现了全局的线程安全。ConcurrentHashMap 有 16 个 Segments,所以理论上,最...

2018-05-30 20:27:44 870

原创 LintCode:62. 搜索旋转排序数组 VS 63. 搜索旋转排序数组II

题目:分析:看到排序数组的查找问题,就要想到二分查找。旋转排序数组其实是由两个递增子数组组成,且前一个子数组中的任意元素都大于后一个数组中元素。left,right分别是指向数组首尾的两个指针。循环条件:left<=right若A[mid]==target,表示若A[mid]>A[left],表示left与mid均处于前一个递增数组中。            若target>=A...

2018-05-30 15:49:54 447

原创 LintCode:91.最小调整代价(动态规划)

题目:分析:本题类似于一个背包问题,数组中的元素一个个调整,由于是求相邻元素的差值,所以只和前一个相邻元素的值有关,所以只需要记录上一个调整的值就可以。dp[i][j]表示调整到第i个数时,此时,第i个数取值为j,为代价和最小。显然dp[i-1][k]已知,则调整的总代价为dp[i][j]=dp[i-1][k]+abs(j-A[i])由于j和k有多种取值可能,所以循环求解判断,k表示前一个数,j表...

2018-05-29 10:03:12 1195

原创 LintCode: 889 屏幕句子适配

分析:直接采用暴力法解决,对于每一行,分析该行可以容纳的单词数,这涉及到列数与单词长度之间的大小关系。public class Solution { /** * @param sentence: a list of string * @param rows: an integer * @param cols: an integer * @return...

2018-05-25 10:14:07 385

原创 LintCode:785. 最大权值和路径(动态规划)

思路:这是一道典型的动态规划题,思路类似于背包问题,dp中每个元素的值分别是来自于该位置上方和该位置右边的较大的一个值,新建dp矩阵,int[][] dp=new int[row+1][col+1]。注意是从右上角开始到左下角结束,状态转移方程为 dp[i][j]=max(dp[i][j+1]+nums[i-1][j],dp[i-1][j]+nums[i-1][j])(i从1开始,j从col-1递...

2018-05-24 10:33:58 1353

原创 LintCode:511. 交换链表中的两个节点

分析:首先,因为头结点也有可能被交换,所以需要在头结点之前创建一个新结点,然后连接到现有的链表之前。新建指针pre1和pre2作为v1和v2的前结点,扫描链表,若pre1或者pre2为空,说明未找到v1或v2。如果pre1和pre2相邻,即pre1.next=pre2,则交换,使得pre1在前pre2在后。讨论两种情况,分别为pre1.next==pre2和pre1与pre2不相邻的情况。publ...

2018-05-23 10:57:09 433

原创 LintCode: 883 Max Consecutive Ones

分析:本题题意是找到连续的1的个数,有1次将0翻转为1的机会。用一个通解来处理此类问题,k为可翻转的机会数目。此题k=1.可以维护一个[left,right]的移动窗口来容纳k个0,每当遇到0,就累加zero的个数,然后判断此时0的个数是否大于k,若大于k,则右移左边界left,如果移除掉的nums[left]为0,则zero--。然后用窗口中的数字个数来更新res。public class So...

2018-05-22 10:06:42 158

原创 LintCode: 547 两数组的交 VS 548 两数组的交II

分析:可以采用set数据结构,来遍历数组1,再遍历数组2,如果set中存在的话,就放入另外一个set中,最后将另外一个set中的元素放入数组并返回即可。public class Solution { /* * @param nums1: an integer array * @param nums2: an integer array * @retu...

2018-05-20 22:58:38 174

原创 MYSQL:聚簇索引和非聚簇索引

聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的:聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。因此,MYSQL中不同的数据存储引擎对聚簇索引的支持不同就很好解...

2018-05-18 15:54:27 189

原创 LintCode:763. Hex Conversion(把一个十进制数n转换成k进制数)

题目:使用Stringbuffer构造要返回的字符串,最后记得要翻转下。public class Solution { /** * @param n: a decimal number * @param k: a Integer represent base-k * @return: a base-k number */ public Str...

2018-05-18 10:20:26 1279

原创 LintCode: 99. 重排链表

题目:分析:首先想到将链表L按照这个规律重新赋值一遍,但题中说不能改变结点的值,然后想到将链表反转后重新链接起来。以1->2->3->4为例按虚线走,形成1->4->2->3->3->2->4->1,若是节点的值都不相同,则遇到相同时,就可以断开形成,若是有相同结点的值,也可以先统计结点个数,然后判断终止条件。但这样就需要新建一个链表。所...

2018-05-17 10:19:51 155

原创 LintCode: 382 三角形计数(考点:前后指针)

题目:分析:此类题目首先想到的是数组先排序(数组元素位置不影响结果,且题目与元素大小有关),最简单的是暴力搜索,三层循环。首先固定i从 2 遍历到 length(S)-1,内循环则为m和n枚举满足条件的情况。这里有个小技巧,因为我们首先对数组进行排序(从小到大),如例1,当S[i] = 7 时, m初始化为0,n初始化为k-1,那么有S[m] + S[n] > S[i],此时不需要再检查4+...

2018-05-13 20:44:17 347 1

原创 LintCode: 197 排列序号

分析:搞一个哈希表,存储数组A中每一位A[i]的后面小于它的数的个数count。为什么这样做呢,因为按照lexicographical order,小的数应该排在前面。那么A[i]后面小于A[i]的数有count个,而i前面又应该有n-i-1位,有(n-1-i)的阶乘种排列的可能,所以应该排在A[i]之前的可能排列就有count * (n-1-i)!个:所以遍历A[]中每一个数,计算在其之前的自然...

2018-05-12 17:16:00 200

原创 LintCode: 190. 下一个排列 VS 50. 上一个排列

题目:分析:先看一个例子,8,5,3,7,6,5,4,1下一个排列应该是:8,5,4,1,3,5,6,7看起来应该是从后往前找,找到第一个降序的数字,因为如果一直都是升序的话,说明一部分以及是全排列的最大情况。第一个比它后一个数小的数,就是需要替换为比它大一点的那个数,即3。找到3以后,需要把它替换成一个比它大一点的数,于是再从后往前找,找到第一个比它大的数,在上面的例子,就是4.将3和4交换,由...

2018-05-12 10:58:16 222

原创 LintCode: 171. 乱序字符串

题目:分析:利用排序和哈希表,对字符串数组中的每一个数组进行排序。这样的话,乱序字符串排序之后有相同的字符顺序,用哈希表存储排序后的字符串为key,源字符串为value,因为一个字符串可能有多个乱序字符串,所以定义一个arraylist来存储这些乱序字符串。最后遍历keyset,输出value——ArrayList数组容量大于等于2的value值。package String;import j...

2018-05-11 14:17:25 397

原创 LintCode: 491. 回文数

题目:分析:    解法一:转换成字符串,然后一个从前一个从后开始一一比较。public boolean isPalindrome1(int num) { String s=String.valueOf(num); char[] chars=s.toCharArray(); int begin=0,end=chars.length-1; ...

2018-05-09 11:36:39 108

原创 LintCode: 902. Kth Smallest Element in a BST

题目:分析:因为二叉搜索树的中序遍历是递增的这一特性,可以先得到该二叉搜索树的中序遍历序列,然后直接返回第k个元素即可。/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(...

2018-05-08 15:55:19 178

原创 LintCode: 72 中序遍历和后序遍历树构造二叉树

题目:根据中序遍历和后序遍历树构造二叉树方法:采用递归的方法,因为二叉树的根结点在处于后序遍历的最后一个位置,在中序遍历中找出它的位置,该位置的左边为根结点的左子树,右边为右子树,然后再进行递归。/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNod...

2018-05-04 16:39:56 249

空空如也

空空如也

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

TA关注的人

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