面试常考
文章平均质量分 51
FrancisGeek的工作室
算法&设计模式
展开
-
java的list转换为树形结构
背景从数据库中取出一段数据, 这些数据会有层级关系, 带上id和parent_id, 现在需要把这些数据转化为树形结构…在实际工作中这个是一个比较常见的问题,比如部门的层级关系, 省市区的层级关系,四级目录关系…...原创 2021-06-01 10:44:19 · 361 阅读 · 0 评论 -
单调栈&单调队列总结
单调栈介绍单调栈的意思是维护一个单调递增或者单调递减的栈, 最通用的解法是找到右边第一个比它大的元素或者找到右边第一个比它小的元素。具体实现由于在Java中的Stack性能很差,而且不够灵活,所以不推荐使用.一般有两种替代方案:ArrayDeque -----底层为数组push()----压栈pop() —出栈peek() —取栈顶pollLast() —取栈尾(这里其实有点像队列了…)LinkedList ----底层为链表...原创 2021-04-22 14:38:03 · 138 阅读 · 0 评论 -
买卖股票问题总结
Description:Say you have an array for which the ith element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (ie, buy one and sell one share of th原创 2016-12-09 19:48:10 · 244 阅读 · 0 评论 -
如何实现一个线程安全的LRU
LRU是什么LRU的中文名字为最近最少使用缓存,一言以蔽之,当加入元素超过存储容量的时候会剔除最少使用过的元素。并且需要get()操作的时间复杂度为O(1)。LRU有什么作用LRU在某种程度上可以作为一种淘汰策略使用,比如redis的淘汰策略中就有LRU的淘汰方式。LRU的简单实现通过上述描述可以知道,我们需要两种基本的数据结构,哈希表(用于get和put操作以及在O(1)时间复杂度下实现查询操作)和双向链表(可以设计为链表尾部加入最近访问的元素,链表头部剔除最近未被访问的元素) 。在Java中原创 2021-04-06 16:34:29 · 2119 阅读 · 2 评论 -
Java与C++编译过程比较
引言前段时间读了周志明的 《深入理解Java虚拟机》,学习了java编译器的工作过程,同时也顺带复习了 C++的编译过程,将两者进行学习对比,希望对读者有所帮助。Java编译过程 java的编译过程分为前端编译器(javac)与后端编译器(JIT),前端编译器生成字节码文件(xx.class),后端编译器生成机器码。Java前端编译器(javac) 1 .注解处理:在JDK1.5之后开始支持注解原创 2017-05-27 16:57:34 · 1244 阅读 · 1 评论 -
Two Sum类问题
引言:Two Sum类问题属于对撞型双指针问题,这类问题的思路不难,但是变形以及问法比较多,这里将部分题目做归纳总结。 在Two Sum问题中,需要用的预处理为排序。但有的时候需要返回索引的位置,就需要设计数据结构先保存索引信息,再进行排序。如果不想这样麻烦的话,可以借助哈希表这个常用的数据结构来代替双指针。题解:1.两数之和 II Two Sum问题的基本变形,在一组整数中找出多少对整数,大于给原创 2017-06-20 19:53:28 · 790 阅读 · 0 评论 -
取模操作(补充说明)
起源在算法中,有时候要用到取模操作,为的是避免数据过大溢出,而有时候只需要验证算法的有效性,并关心实际的值,下面给出取模操作的性质以及一个简单的应用例子。模运算性质 ( a + b ) % c = ( ( a % c ) + ( b % c ) ) % c ( a * b ) % c = ( ( a % c ) * ( b % c ) ) % c ( a – b ) % c = (原创 2017-04-17 11:37:39 · 3100 阅读 · 0 评论 -
背包问题细节探析
引言:上一周在看《背包九讲》,这周也在练习背包型动态规划的题目,在这里分享几点学习过程中的体会,涉及到空间优化:二维转一维的理解以及循环顺序的理解,最后会析背包问题的一些变种问题。为了叙述方便,这篇博客仅仅谈及01背白问题和完全背包问题,其余读者感兴趣可以自己查阅《背包九讲》01背包01背包问题是所有背包问题的基础,先来看裸的01背包问题: 题目:有N件物品和一个容量为V 的背包。第i件物品的费用原创 2017-06-08 21:12:57 · 4111 阅读 · 0 评论