摘要:
解决SimpleDateFormat类的线程安全问题的方案总结 在解决解决SimpleDateFormat类的线程安全问题的几种方案中,局部变量法由于线程每次执行格式化时间时,都会创建SimpleDateFormat类的对象,这会导致创建大量的SimpleDateFormat对象,浪费运行空间和消耗 阅读全文
摘要:
基本概念: 队列是一种特殊的线性表。以一个普通的单端队列为例,只允许在表的前端进行删除操作,而在表的后端进行插入操作。队列的入和出与元素(数据)进的次序有关,只有最早进入队列的元素才能最先从队列中删除,所以队列又被称为先进先出(FIFO—first in first out)线性表。 优先队列和队列 阅读全文
摘要:
一、基本概念 栈(stack)是很简单的一种数据结构,先进后出的逻辑顺序,符合某些问题的特点,比如说函数调用栈。 单调栈实际上就是栈,只是利用了一些巧妙的逻辑,使得每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)。 听起来有点像堆(heap)?不是的,单调栈用途不太广泛,只处理一种典型的 阅读全文
摘要:
一、基本概念 前缀和指一个数组的某下标之前的所有数组元素的和(包含其自身),前缀和是一种重要的预处理,能够降低算法的时间复杂度。 preSum是前缀和数组, nums是内容数组。 拥有前缀和数组后, 我们可以在O(1)的时间复杂度内求出区间和。 使用场景: 前缀和计算通常作为某种计算的预处理过程,作 阅读全文
摘要:
xx 阅读全文
摘要:
**问题:**接口返回的时间格式是long型的时间戳,使用GSON.fromJson(json, typeOfT)解析失败 原因: GSON无法直接解析long类型的时间戳,需要自定义和注册适配器 点击查看代码 GsonBuilder builder = new GsonBuilder(); // 阅读全文
摘要:
滑动窗口算法框架 点击查看代码 void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (char c : t) need[c]++; int left = 0, right = 0; i 阅读全文
摘要:
基本概念: 二分法属于编程五大常用算法(分治、贪心、回溯、分支定界和动态规划)中的分治算法。分治算法的思想就是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同,求出子问题的解,就可得到原问题的解。二分法由于其划分的简单和均匀的特点,是分治求解时经常采用的一种有效的 阅读全文
摘要:
一、快慢指针 1.判定链表中是否含有环 经典解法就是用两个指针,一个跑得快,一个跑得慢。如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。 boolean hasCycle(ListNode head) { Lis 阅读全文
摘要:
BFS 相对 DFS 的最主要的区别是:BFS 找到的路径一定是最短的,但代价就是空间复杂度可能比 DFS 大很多。 BFS框架: // 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { Queue<Node> q; // 阅读全文