一个技术人天马行空的一亩田

技术需要土壤来扎根,技术需要土壤来成长,技术人更需要土壤来吐槽~

使用线段树(SegmentTree)求解区间和

SegmentTree算法示例

介绍 线段树(segment tree),顾名思义, 是用来存放给定区间(segment, or interval)内对应信息的一种数据结构。与树状数组(binary indexed tree)相似,线段树也用来处理数组相应的区间查询(range query)和元素更新(update)操作。与树状数组不同的是,线段树不止可以适用于区间求和的查询,也可以进行区间最大值,区间最小值(Range ......

BinaryIndexedTree求解指定范围和

BinaryIndexedTree算法示例

简介 树状数组或二叉索引树 Binary Indexed Tree,又以其发明者命名为 Fenwick树。其初衷是解决数据压缩里的累积频率的计算问题,现多用于高效计算数列的前缀和, 区间和。 树状数组是一个能高效处理数组①更新、②求前缀和的数据结构。它提供了2 个方法,时间复杂度均为O(log n): update(index, delta):将 delta 加到数组的 index 位置 ......

如何自定义一个栈

使用堆内存实现栈

场景 最近练算法题的时候,有这么一个情况。题目限制了栈内存的大小,但是根据题目要求呢,确实是需要使用栈来完成的,例如 DFS算法。 那么这个时候就需要我们自己来实现栈了,具体如下。 算法示例 12345678910111213141516171819202122232425262728293031import java.util.HashSet;import java.util.Linked......

CyclicBarrier的小例子

干饭人来展示如何使用CyclicBarrier

简介&场景 假如有若干个线程,当多个线程都达到某一个点之后才能开始时就可以使用CyclicBarrier来实现。 有这么一个虚拟的场景: 有一群小伙伴去吃饭,能去吃饭的地有个小板车,班车每次坐满三人发车。假如没有坐满三人,十秒后发车。 下面就看看我们怎么来实现。 编码示例 123456789101112131415161718192021222324252627282930313......

学会如何使用延迟队列

一个例子包教会使用DelayQueue

场景 通常在我们需要实现一个顺序执行的管理器时,会使用一个队列来完成。 队列的数据结构决定了,只有前一个任务被执行消费掉,才能轮到下一个任务。其分配到资源就可以执行自身的业务了。 但是一般情况下,队列都是执行完一个之后就紧接着执行下一个了,中间是没有停顿的。例如java的 ArrayDeque<E> 、 PriorityQueue<E> 等JDK的默认实现。 那么,如......

运动会上的CountDownLatch

用百米赛跑展示CountDownLatch的用法

田径运动会 点开这篇文章的你,突然感觉眼前一晃,我们已经穿越到了2008年的鸟巢,现在马上将要开始的项目的正是田径之王——百米短跑。 身为Coder的你突然想到,如果用代码来模拟赛跑,应该怎么实现呢? 于是你想到了使用线程来模拟每个运动员,每个线程都运行结束则表示选手都到达了终点,比赛结束。 那么,怎么来处理每个选手都完成比赛了呢。反正我是笨笨的想到了用 AtomicInteger 共享变量......

迪杰斯特拉(Dijkstra)算法模板

个人算法练习总结贴

迪杰斯特拉算法 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。 注意:注意该算法要求图中不存在负权边。 迪杰斯特拉算法是在BFS算法的......

移动矩阵的问题求解方法

个人算法练习总结贴

题目介绍 最近练题的过程中,遇到这么一种情况:在一个二维矩阵中,有一个小的固定的图形,需要移动这个小的图形到达某个指定的位置,求最短距离。 图形化的题目看起来长下面这个样子: 其中: S:表示起始位置 O:表示目标位置,S 接触到 O 为终止条件 W:表示水域,是不可通过的区域 这个图还没看明白题目的话,不要紧。看下面这张图!!! 对滴!就是90坦克大战的简易版(暴露年龄,哈哈~),......

构建距离矩阵求最短距离

个人算法练习总结贴

题目 最近刷题的时候发现了这么一个场景,在一个 N * M 的二维矩阵上有5个点,并指定其起始点和终止点,求途径剩余三个点的最短路径。 具体描述见下图,S 是起始点,E 为终止点,其余三点为 A,B,C。当然原题还有很多限制,比如满足什么条件的能通过啊,什么什么条件的不能通过啊等等,此处简单化对待。 分析 可能的路径分析 通过观察可知,此题可以走的路径有6种,分别为: S - A - B......

集合元素的排列与组合

个人算法练习总结贴

最近因为算法考试,一直就是有空闲了刷刷题。 刷的题多了,也就发现很多基础算法在一些较复杂的题中都有应用,比如这篇文章中将要提到的排列和组合。 排列 排列,一般地,从m个不同元素中取出n(n≤m)个元素,按照一定的顺序排成一列,叫做从m个元素中取出n个元素的一个排列(permutation)。 组合 组合,一般地,从m个不同的元素中,任取n(n≤m)个元素为一组,叫作从m个不同元素中取出......