- 博客(274)
- 资源 (3)
- 收藏
- 关注
原创 LeetCode 题解
数组问题LeetCode 283.Move ZeroesLeetCode 27.Remove ElementLeetCode 26. Remove Duplicates from Sorted ArrayLeetCode 80. Remove Duplicates from Sorted Array IILeetCode 75. Sort ColorsLeetCode 88. Me...
2018-05-12 11:53:34 723
转载 Redis实现分布式锁
转载自https://blog.csdn.net/fengshizty/article/details/53561562 Redis实现分布式锁在集群等多服务器中经常要使用到同步处理一下业务,这时普通的事务是满足不要业务需求,需要分布式锁。分布式锁的实现方式有多种,如redis实现分布式锁,z...
2018-08-05 10:09:07 373
转载 乐观锁与悲观锁
转载自 https://www.cnblogs.com/qjjazry/p/6581568.html首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的...
2018-07-26 21:11:18 528
转载 Java 中的锁—偏向锁、轻量级锁、自旋锁、重量级锁
转载自 https://blog.csdn.net/zqz_zqz/article/details/70233767 之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchroniz...
2018-07-26 17:58:50 435
转载 JVM的运行时数据区相关总结
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上...
2018-07-22 14:43:08 321
转载 常量池与运行时常量池
* 转载自 [java虚拟机:运行时常量池](https://www.cnblogs.com/xiaotian15/p/6971353.html)———-一、运行时常量池简介运行时常量池(Runtime Constant Pool),它是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于...
2018-07-22 14:35:56 8163 1
原创 快速失败(fail-fast)和安全失败(fail-safe)的区别
一:快速失败(fail—fast)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()...
2018-07-21 16:22:20 1322 1
原创 HashMap与Hashtable的对比
首先,关于 Hashtable的源码相关解析可以看 Java8源码-Hashtable(2) HashMap为什么线程不安全多线程 put 操作后, get 操作导致死循环,导致 cpu100%的现象。 主要是多线程同时put 时, 如果同时触发了 rehash 操作, 会导致扩容后的 HashMap 中的链表中出现循环节点, 进而使得后面 get 的时候, 会死循环。关于死循环...
2018-07-21 10:23:52 272
原创 Java中Map相关类的总结
Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: HashMap:它根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap最多只允许一条记录的键为null,...
2018-07-20 10:46:06 499
原创 LinkedList源码解析
本文对LinkedList的实现讨论都基于JDK8版本Java中的LinkedList类实现了List接口,是一种链表类型的数据结构,支持高效的插入和删除操作,同时也实现了Deque接口,使得LinkedList类也具有队列的特性。LinkedList类的底层实现的数据结构是一个双端的链表。LinkedList类中有一个内部私有类Node,这个类就代表双端链表的节点Node。这个类有三个属性,分别...
2018-07-15 16:15:07 286
原创 ArrayList的源码分析
ArrayList使用的存储的数据结构ArrayList的初始化ArrayList是如何动态增长ArrayList如何实现元素的移除ArrayList小结 ArrayList是我们经常使用的一个数据结构,我们通常把其用作一个可变长度的动态数组使用,大部分时候,可以替代数组的作用,我们不用事先设定ArrayList的长度,只需要往里不断添加元素即可,ArrayList会动态增加容量。ArrayLis...
2018-07-15 15:13:35 329
原创 Redis基础知识集命令总结
1. Redis是内存数据库,支持数据持久化,当服务重启之后,可以再将数据reload进内存中。2. Redis服务启动后,对外提供服务的端口号为63793. 如果执行的是 ./redi-cli,那么自动连接本机的redis服务4. 如果想要redis服务后台启动: ./redis-server &5. 关闭redis服务 kill -9 PID6. Redis多种启...
2018-05-29 21:49:57 341 2
转载 IntelliJ IDEA 安装使用教程以及激活码
转载自 史上最简单的 IntelliJ IDEA 教程 温馨提示:本教程的 GitHub 地址为「intellij-idea-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。 1 简介 IntelliJ IDEA(简称 IDEA),是 Java 语言开发的集成环境,IDEA 在业界被公认...
2018-05-17 20:55:47 3025
原创 LeetCode 435. Non-overlapping Intervals
问题描述给定一组区间,问最少删除多少个区间,才能让剩下的区间不重合地址问题描述问最少删除多少个区间,等价于最多保留多少个区间。该题有两种解法: 动态规划: 该解法类似于 LeetCode 300. Longest Increasing Subsequence(最长递增子序列) 。为了判别是否重叠,我们先对区间数组进行排序(按照区间的左边界进行排序),然后我们可以求解...
2018-05-12 09:43:27 447
原创 LeetCode 392. Is Subsequence
问题描述地址问题分析验证串s 是否是字符串t的子序列,有以下几种做法:方法1: 贪心 用两个指针从前向后,若s[sIndex] == t[tIndex],说明在t中已经找到一个,则两指针都后移,若s[sIndex] != t[tIndex],则将tIndex后移,看t的下一个元素能否和s[sIndex]相匹配。方法2:动态规划 用dp[i][j] 来表示s[i ~ n...
2018-05-11 21:14:45 1037 1
原创 LeetCode 455. Assign Cookies
问题描述地址问题分析贪心问题,对两个数组进行排序,然后分配经验教训贪心问题常和排序搭配使用代码实现class Solution { public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); ...
2018-05-11 16:17:51 208
原创 最长公共子串问题
问题描述给出两个字符串,找到最长公共子串,并返回其长度。Example : 给出A=“ABCD”,B=“CBCE”,返回 2牛客地址LintCode地址问题分析与 最长公共子序列(Longest Common Subsequence)问题 不同,该题是求最长公共子串的长度,子串必须要求连续,而子序列则可以不连续。针对子串这一特点,设置的状态也有所不同。最长公共子序列是属...
2018-05-11 15:00:26 1323
原创 最长公共子序列(Longest Common Subsequence)问题
问题描述给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。Example : 给出”ABCD” 和 “EDCA”,这个LCS是 “A” (或 D或C),返回1 给出 “ABCD” 和 “EACB”,这个LCS是”AC”返回 2牛客地址LintCode地址问题分析最长公共子序列问题是动态规划经典题目,我将从暴力递归,到记忆化搜索,到动态规划,一步步讲解。暴...
2018-05-11 10:14:53 4956
原创 LeetCode 376. Wiggle Subsequence
问题描述地址问题分析在 O(N) 的时间复杂度下求一个数组的最长摆动(升序降序间或变化)子序列长度。用贪心的思想,用up 来记录上一个子序列末尾两位数字是升序的最长子序列的长度,用down 来记录上一个子序列末尾两位数字是降序的最长子序列的长度,初始化都为1,从i = 1 开始向后遍历nums数组: 如果当前nums[i] 是升序,那么便更新up,up = down + ...
2018-05-10 21:27:01 181
原创 LeetCode 300. Longest Increasing Subsequence(最长递增子序列)
问题描述Given an unsorted array of integers, find the length of longest increasing subsequence. For example, Given [10, 9, 2, 5, 3, 7, 101, 18], The longest increasing subsequence is [2, 3, 7, 101],...
2018-05-10 20:33:29 300
原创 LeetCode 494. Target Sum
问题描述问题分析一看是统计所有可能性个数问题,便知是用动态规划。先从暴力递归入手,int countWays(int[] nums, int i, int target) 返回 nums[i ~ end] 能否有几种方式可以加出target(基于减法的思想)。对于 nums[i]元素,有加和减两种决策,分别进行递归,两种决策可能性之和即为所求。但改写动态规划时却发现,target...
2018-05-09 16:05:47 160
原创 LeetCode 140. Word Break II
问题描述地址问题分析该问题是 LeetCode 139. Word Break 的进阶,139是判断能否分割,是一个DP问题(暴力dfs会TLE),而该题是返回分割的具体可能性,是 DFS + 回溯的问题(也有DP的解法,我暂时没看懂…)首先,尝试了暴力DFS,TLE了,因为存在大量的冗余工作,然后关键来了,采用了一种类似于记忆化搜索的套路来对DFS进行剪枝。 noBre...
2018-05-06 20:55:02 186
原创 LeetCode 139. Word Break
问题描述地址问题分析给定一个字符串和字符串集合,看能否将该字符串分割成字符集合里面的序列。一开始的想法就是类似于DFS 那种递归,从i位置起,枚举出所有分割情况,若字符集合存在该分割出的字符串,然后从新位置继续dfs,这样方面存在大量冗余计算,肯定是TLE的啦,然后改写动态规划。dp[i] 表示从 i位置起分割出的全部子串能否都在字符串集合中。状态转移关系见具体实现。值...
2018-05-06 14:52:35 181
原创 LeetCode 474. Ones and Zeroes
问题描述Example 1 : Input: Array = {“10”, “0001”, “111001”, “1”, “0”}, m = 5, n = 3 Output: 4 Explanation: This are totally 4 strings can be formed by the using of 5 0s and 3 1s, which are...
2018-05-06 11:46:47 215
原创 LeetCode 377. Combination Sum IV
问题描述地址问题分析该题类似于排列问题,一个元素可以使用多次。而 LeetCode 518. Coin Change 2 类似于组合问题,同样一个元素可以使用多次,两题都是统计可能性的次数,因为该题还要考虑顺序,所以肯定比 518统计的次数多。画出递归树,从递归函数入手,然后到记忆化搜索,然后到动态规划。注意,也可以先对数组进行排序来优化。该题中记忆化搜索要比动态规划运行...
2018-05-05 19:05:13 326
原创 LeetCode 518. Coin Change 2
问题描述地址地址分析类似于 LeetCode 322. Coin Change , 322是求所有可能性中的最少硬币数,是一个最优子结构问题。而该题是统计所有可能性(方法)的个数,至于LeetCode 39. Combination Sum ,则是枚举出所有的可能性的具体情况。同样是一个完全背包问题(i位置元素要还是不要的问题),有两种思路: dp[i][j] 表示 :c...
2018-05-05 15:46:33 382
原创 LeetCode 322. Coin Change
问题描述地址问题描述经典的凑硬币问题:给定不同面值的硬币,问至少需要多少枚硬币,可以凑成指定的金额。如果无法凑成,返回 -1,注意,每一硬币可以无限次使用。因为每一硬币可以无限次使用,所以这是一个完全背包问题,同时,这也类似于组合问题,和 LeetCode 39. Combination Sum 类似,只不过39需要返回所有的具体路径,要用 dfs + 回溯。而该题是一...
2018-05-05 11:20:52 226
原创 LeetCode 416. Partition Equal Subset Sum
问题描述地址问题分析给定一个非空正整数数组,能否将数组分成两部分(子集),使两部分和相等。本质上就是在一个数组中取任意个数相加,能否加出 sum/2,是一个简化版的背包问题。首先,如果 sum为奇数,肯定找不出这样的两部分,直接返回false即可。当为偶数时,才采用类似处理背包问题的动态规划法,只不过该题更为简单,没有weight,少一个参数。具体见代码实现中的注释...
2018-05-04 21:12:55 141
原创 LeetCode 188. Best Time to Buy and Sell Stock IV
问题描述地址问题分析假设可以最多进行 k次交易,那么求能获得的最大利益利用动态规划解题:首先明确两个状态的意义: local[i][j] : 第i天正好完成了j次交易的最大利益global[i][j] : 前i天完成了j次交易的最大利益递归关系: local[j] = Math.max(local[j] + diff, global[j - 1] + Math.ma...
2018-05-04 15:46:31 184
原创 LeetCode 122. Best Time to Buy and Sell Stock II
问题描述地址问题分析该题中的股票可以无限次买入卖出,但实际上最大收益是相邻数字的差值的累加和。注意 d - a = d - c + c - a代码实现class Solution { public int maxProfit(int[] prices) { if (prices == null || prices.length == ...
2018-05-04 15:33:00 141
原创 LeetCode 121. Best Time to Buy and Sell Stock
问题描述地址问题分析本质上是求数组中前后两个数字的最大差值。类似于求连续数组的最大和问题,是一个根据当前状态的局部最优和上一状态的全局最优求当前全局最优的过程,然后下一状态的局部最优又是根据当前状况的局部或者全局最优求取。该题是用一个变量维持[0 ~ i] 的最小价值(局部最优),然后用另一个变量维持最大利益(全局最优),遍历数组,不断更新这两个值,最终全局最优即为所求...
2018-05-04 15:27:15 137
原创 LeetCode 337. House Robber III
问题描述地址问题分析该题是 LeetCode 198. House Robber 和 LeetCode 213. House Robber II 的进阶,只不过形状换成了二叉树,而且解决方法不再是动态规划,而是 DFS.该题有点像最大活跃度的一个问题。对于一个以root 为根的树,分为两种情况: 要当前的根节点,那么下一层它的孩子节点肯定不能抢不要当前的跟节点,那么它...
2018-05-03 09:35:15 149
原创 LeetCode 213. House Robber II
问题描述地址问题分析该题是 LeetCode 198. House Robber 进阶题,基本方法还是一样, 该题是把数组看成一个环,数组的首部和尾部同样也有邻居关系,不能同时选择。方法: 既然首部和尾部不能同时选择,那么我们先求 nums[0 ~ end - 1]的最大抢劫和, 再求 nums[1 ~ end] 的最大抢劫和,两者求其大即为所求。代码实现cl...
2018-05-03 08:28:02 226
原创 LeetCode 198. House Robber
问题描述地址问题分析这道题不难,本质相当于在一列数组中取出一个或多个不相邻数,使其和最大。最优化问题。很明显用动态规划求解。但是有一点比较有意思,如果对状态定义的不同,算法时间复杂度不同如果 dp[i] 表示 [i ~ n-1] 中的最大和,那么状态转移条件为 dp[i] = Math.max(nums[j] + nums[j + 2]) 其中i <= j < ...
2018-05-02 21:24:56 143
原创 LeetCode 63. Unique Paths II
问题描述地址问题分析LeetCode 62. Unique Paths 的进阶题,只不过多了一个障碍物的概念,多加一个判断即可。代码实现递归(TLE) public int uniquePathsWithObstacles(int[][] obstacleGrid) { if (obstacleGrid == null || obs...
2018-05-02 19:56:18 137
原创 LeetCode 91. Decode Ways
问题描述地址问题分析将给定数字字符串译码成字母字符串,看能有多少种译码情况和 LeetCode 62. Unique Paths 类似,是统计可能性情况个数类型的题目,先从递归入手,然后想动态规划。译码情况的问题,要注意,当前可能译一个,也可能译两个,也可能遇到‘0’,直接译码失败,这些都要考虑。代码实现递归(TLE) public int n...
2018-05-01 11:58:37 158
原创 LeetCode 62. Unique Paths
问题描述地址问题分析求从一个棋盘的左上角到右下角共有多少种路径,只能向下或者向右走。该题类似于 LeetCode 64. Minimum Path Sum , 只不过 64是求最短路径和,是最优子结构问题。该题是统计数目。该题动态规划有两种思路: 把[i,j] 看成是起点还是终点 dp[i][j] 表示从[i,j] 出发到 [m,n] 共有多少条路径, dp[i][j] ...
2018-05-01 11:23:01 182
原创 LeetCode 343. Integer Break
问题描述Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get.For example, given n = 2,...
2018-04-30 20:37:49 148
原创 LeetCode 64. Minimum Path Sum
问题描述地址问题分析该题和 LeetCode 120. Triangle 一样,是用动态规划求解最值问题,求解路径最小和问题。只不过120是三角形,可以说比该题稍微麻烦一点吧。同样是先从递归入手,然后到动态规划,然后是动态规划的空间优化。关于空间优化,因为dp[i][j] 只依赖于 dp[i + 1][j] 与 dp[i][j + 1],那么同样可用一个数组滚动更新,来取...
2018-04-30 16:33:05 168
IEEE论文LaTex模板
2019-02-27
IEEE论文word模板
2019-02-27
Springer-LNCS word格式
2018-03-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人