<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hello_my_coder的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hello_my_coder</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hello_my_coder]]></copyright><item><title><![CDATA[HashMap原理，HashMap，HashTable, ConcurrentHashMap对比]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/108209735</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/108209735</guid><author>hello_my_coder</author><pubDate>Mon, 24 Aug 2020 21:55:01 +0800</pubDate><description><![CDATA[HashMap原理
1.7及之前，默认链式Hash存储
从 JDK 1.8 开始，一个桶存储的链表长度大于等于 8 时会将链表转换为红黑树。
用key的hashCode值对容量取模, 开链法，头插法。
如果size &gt;= threshold（这个由装载因子决定）时， 进行扩容，容量扩为原来的两倍（方便重新计算下标，比如原来的位置+原容量），重新把key, value插入。
HashMap，HashTable, ConcurrentHashMap对比
HashMap是非线程安全的, 允许null值（因为]]></description><category></category></item><item><title><![CDATA[JAVA多线程实现，线程状态，线程池使用，Threadlocal]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/108209355</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/108209355</guid><author>hello_my_coder</author><pubDate>Mon, 24 Aug 2020 21:42:05 +0800</pubDate><description><![CDATA[有三种使用线程的方法：

实现 Runnable 接口；
实现 Callable 接口；
与 Runnable 相比，Callable 可以有返回值，返回值通过 FutureTask 进行封装。
继承 Thread 类。
同样也是需要实现 run() 方法，因为 Thread 类也实现了 Runable 接口。
当调用 start() 方法启动一个线程时，虚拟机会将该线程放入就绪队列中等待被调度，当一个线程被调度时会执行该线程的 run() 方法。

实现 Runnable 和 Callable 接口的类只]]></description><category></category></item><item><title><![CDATA[Leetcode 201. 数字范围按位与]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/108186293</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/108186293</guid><author>hello_my_coder</author><pubDate>Sun, 23 Aug 2020 18:06:47 +0800</pubDate><description><![CDATA[给定范围 [m, n]，其中 0 &lt;= m &lt;= n &lt;= 2147483647，返回此范围内所有数字的按位与（包含 m, n 两端点）。
示例 1:
输入: [5,7]
输出: 4
示例 2:
输入: [0,1]
输出: 0
tips: 转换为求m, n 的最长公共前缀
class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        if(m == 0) {
            return 0;
   ]]></description><category></category></item><item><title><![CDATA[JVM 内存模型，垃圾回收，垃圾收集器]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/108182855</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/108182855</guid><author>hello_my_coder</author><pubDate>Sun, 23 Aug 2020 14:41:41 +0800</pubDate><description><![CDATA[运行时数据区域：
线程共有：方法区、堆
方法区：用于存放已被加载的类信息，常量，静态变量，即时编译器编译后的代码等数据。
堆：所有的对象都在这里分配内存，是垃圾收集的主要区域，现代的垃圾收集算法都采用分代收集算法，可以将堆分为两块，新生代，老生代。不需要连续的内存，可以动态增加，增加失败会抛OOM异常。
线程私有：程序计数器，虚拟机栈，本地方法栈
程序计数器：记录正在执行的虚拟机字节码指令的地址
虚拟机栈：每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调]]></description><category></category></item><item><title><![CDATA[LeetCode 面试金典 面试题 02.08. 环路检测]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/108077618</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/108077618</guid><author>hello_my_coder</author><pubDate>Tue, 18 Aug 2020 15:11:06 +0800</pubDate><description><![CDATA[给定一个链表，如果它是有环链表，实现一个算法返回环路的开头节点。
有环链表的定义：在链表中某个节点的next元素指向在它前面出现过的节点，则表明该链表存在环路。
示例 1：
输入：head = [3,2,0,-4], pos = 1
输出：tail connects to node index 1
解释：链表中有一个环，其尾部连接到第二个节点。
示例 2：
输入：head = [1,2], pos = 0
输出：tail connects to node index 0
解释：链表中有一个环，其尾部连接到第]]></description><category></category></item><item><title><![CDATA[LeetCode 面试金典面试题 02.06. 回文链表]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/108076344</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/108076344</guid><author>hello_my_coder</author><pubDate>Tue, 18 Aug 2020 14:30:35 +0800</pubDate><description><![CDATA[编写一个函数，检查输入的链表是否是回文的。
示例 1：
输入： 1-&gt;2
输出： false
示例 2：
输入： 1-&gt;2-&gt;2-&gt;1
输出： true
进阶：
你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题？
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/palindrome-linked-list-lcci
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
O(n) 时间复杂度和 O(1]]></description><category></category></item><item><title><![CDATA[LeetCode 程序员面试金典 面试题 03.05. 栈排序]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/108059613</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/108059613</guid><author>hello_my_coder</author><pubDate>Mon, 17 Aug 2020 17:04:31 +0800</pubDate><description><![CDATA[栈排序。 编写程序，对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据，但不得将元素复制到别的数据结构（如数组）中。该栈支持如下操作：push、pop、peek 和 isEmpty。当栈为空时，peek 返回 -1。
示例1:
输入：
[“SortedStack”, “push”, “push”, “peek”, “pop”, “peek”]
[[], [1], [2], [], [], []]
输出：
[null,null,null,1,null,2]
示例2:
输入：
[“Sorted]]></description><category></category></item><item><title><![CDATA[LeetCode 程序员面试经典面试题 04.06. 后继者]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/108045303</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/108045303</guid><author>hello_my_coder</author><pubDate>Sun, 16 Aug 2020 22:14:01 +0800</pubDate><description><![CDATA[设计一个算法，找出二叉搜索树中指定节点的“下一个”节点（也即中序后继）。
如果指定节点没有对应的“下一个”节点，则返回null。
示例 1:
输入: root = [2,1,3], p = 1
2
/  \
1   3
输出: 2
示例 2:
输入: root = [5,3,6,2,4,null,null,1], p = 6
  5
 / \
3   6

/ 
2   4
/
1
输出: null
有递归法和非递归法：
思想类似， 与root 节点比较，若p.val &gt;= root.val, 从右子]]></description><category></category></item><item><title><![CDATA[LeetCode 110. 平衡二叉树]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/106041453</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/106041453</guid><author>hello_my_coder</author><pubDate>Sun, 10 May 2020 20:25:22 +0800</pubDate><description><![CDATA[给定一个二叉树，判断它是否是高度平衡的二叉树。
本题中，一棵高度平衡二叉树定义为：
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3

/ 
9  20
/  
15   7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
   1
  / \
 2   2
/ \

3   3
/ 
4   4
返回 false 。
tips : 自顶向上法, 时间复杂度O(n)
cla]]></description><category></category></item><item><title><![CDATA[Leetcode 518. 零钱兑换 II]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105827795</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105827795</guid><author>hello_my_coder</author><pubDate>Tue, 28 Apr 2020 23:42:48 +0800</pubDate><description><![CDATA[给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。
示例 1:
输入: amount = 5, coins = [1, 2, 5]
输出: 4
解释: 有四种方式可以凑成总金额:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
示例 2:
输入: amount = 3, coins = [2]
输出: 0
解释: 只用面额2...]]></description><category></category></item><item><title><![CDATA[LeetCode 144. 二叉树的前序遍历]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105771678</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105771678</guid><author>hello_my_coder</author><pubDate>Sun, 26 Apr 2020 16:29:25 +0800</pubDate><description><![CDATA[给定一个二叉树，返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1

2
/
3
输出: [1,2,3]
进阶: 递归算法很简单，你可以通过迭代算法完成吗？
tips : 非递归法，使用栈，先压右子节点，再压左子节点。
class Solution {
public:
    vector&lt;int&gt; preorderTraversal(TreeNode* root) ...]]></description><category></category></item><item><title><![CDATA[LeetCode 145. 二叉树的后序遍历]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105750750</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105750750</guid><author>hello_my_coder</author><pubDate>Sat, 25 Apr 2020 15:39:48 +0800</pubDate><description><![CDATA[给定一个二叉树，返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1

2
/
3
输出: [3,2,1]
进阶: 递归算法很简单，你可以通过迭代算法完成吗？
非递归版tips : 使用栈来记录，类似dfs, 先求出其逆后序遍历的结果，然后再反转
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *   ...]]></description><category></category></item><item><title><![CDATA[LeetCode 279. 完全平方数]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105735740</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105735740</guid><author>hello_my_coder</author><pubDate>Fri, 24 Apr 2020 17:20:26 +0800</pubDate><description><![CDATA[给定正整数 n，找到若干个完全平方数（比如 1, 4, 9, 16, …）使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
示例 1:
输入: n = 12
输出: 3
解释: 12 = 4 + 4 + 4.
示例 2:
输入: n = 13
输出: 2
解释: 13 = 4 + 9.
法1： 动态规划，时间复杂度O(n*sqrt(n)), 空间复杂度O(n)
class Soluti...]]></description><category></category></item><item><title><![CDATA[LeetCode 501. 二叉搜索树中的众数]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105720266</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105720266</guid><author>hello_my_coder</author><pubDate>Thu, 23 Apr 2020 23:16:24 +0800</pubDate><description><![CDATA[给定一个有相同值的二叉搜索树（BST），找出 BST 中的所有众数（出现频率最高的元素）。
假定 BST 有如下定义：
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树
例如：
给定 BST [1,null,2,2],
1

2
/
2
返回[2].
提示：如果众数超过1个，不需考虑输出顺序
进阶：你可以不使用额外的空间吗？（...]]></description><category></category></item><item><title><![CDATA[LeetCode 450. 删除二叉搜索树中的节点]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105535016</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105535016</guid><author>hello_my_coder</author><pubDate>Wed, 15 Apr 2020 14:47:24 +0800</pubDate><description><![CDATA[给定一个二叉搜索树的根节点 root 和一个值 key，删除二叉搜索树中的 key 对应的节点，并保证二叉搜索树的性质不变。返回二叉搜索树（有可能被更新）的根节点的引用。
一般来说，删除节点可分为两个步骤：
首先找到需要删除的节点；
如果找到了，删除它。
说明： 要求算法时间复杂度为 O(h)，h 为树的高度。
tips : 递归，删除该位置节点后，要用前驱/后继来替代，然后再递归删除节点。
cl...]]></description><category></category></item><item><title><![CDATA[LeetCode 33. 搜索旋转排序数组]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105523248</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105523248</guid><author>hello_my_coder</author><pubDate>Tue, 14 Apr 2020 22:52:43 +0800</pubDate><description><![CDATA[假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如，数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
搜索一个给定的目标值，如果数组中存在这个目标值，则返回它的索引，否则返回 -1 。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
示例 1:
输入: nums = [4,5,6,7,0,1,2], targ...]]></description><category></category></item><item><title><![CDATA[C++ 面试题——实现String类]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105467853</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105467853</guid><author>hello_my_coder</author><pubDate>Sun, 12 Apr 2020 12:56:31 +0800</pubDate><description><![CDATA[**需要实现：**构造函数， 拷贝构造函数，复制运算符，析构函数，size函数等等。
主要思路：用cstring的一些库函数来实现。
底层的数据结构char*
会用到 strlen,   strcpy等库函数
#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include&lt;cmath&gt;...]]></description><category></category></item><item><title><![CDATA[LeetCode 92. 反转链表 II]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105302099</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105302099</guid><author>hello_my_coder</author><pubDate>Fri, 03 Apr 2020 21:59:07 +0800</pubDate><description><![CDATA[反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1-&gt;2-&gt;3-&gt;4-&gt;5-&gt;NULL, m = 2, n = 4
输出: 1-&gt;4-&gt;3-&gt;2-&gt;5-&gt;NULL
tips : 需要用多个指针保存位置m, m-1的结点，然后反转，再把链表接起来，要考虑m=1的特殊情况。...]]></description><category></category></item><item><title><![CDATA[LeetCode 56. 合并区间]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105231325</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105231325</guid><author>hello_my_coder</author><pubDate>Tue, 31 Mar 2020 20:40:10 +0800</pubDate><description><![CDATA[给出一个区间的集合，请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
tips :...]]></description><category></category></item><item><title><![CDATA[LeetCode 31. 下一个排列]]></title><link>https://blog.youkuaiyun.com/hello_my_coder/article/details/105132155</link><guid>https://blog.youkuaiyun.com/hello_my_coder/article/details/105132155</guid><author>hello_my_coder</author><pubDate>Fri, 27 Mar 2020 00:21:40 +0800</pubDate><description><![CDATA[实现获取下一个排列的函数，算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列，则将数字重新排列成最小的排列（即升序排列）。
必须原地修改，只允许使用额外常数空间。
以下是一些例子，输入位于左侧列，其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
tips : 先从后往前找到位置i-1，满足位置i元素大于i...]]></description><category></category></item></channel></rss>