需求描述 设计一个方法,每次调用返回一个自增id,同时需要满足以下要求。 可更新id的状态为已使用,已使用的id下次调用时不再返回 可修改某个id的状态为未使用,下次调用时设为未使用状态的id可重新被返回 思路 思路一:如果数据量非常小,直接使用一个集合存储已使用的id,使用循环和维护这个集合即可,但数据量大了,此方法返回数据的时间复杂度和占用的空间都是比较大的。 思路二(推荐):建立一个(位图)bitmap,初始时bitmap的每一位都为0,0代表未使用,1代表已使用。每次请求获取id时从此bitmap的第0位开始返回一个未使用的index即可。 以一个bitmap长度为65536的b...

堆作为必须掌握的数据结构之一,在众多场景中也得到了广泛的应用。比较典型的,如java中的优先队列PriorityQueue、算法中的TOP-K问题、最短路径Dijkstra算法等,在这些经典应用中堆都担任着灵魂般的角色。 理论基础 binaryheap 再一起回忆一下堆的一个性质:堆总是一棵完全二叉树。有些文章中也将堆称为二叉堆(binaryheap)。 在堆中,再根据堆顶点为最大值与最小值,分为大顶堆与小顶堆。 新增一个元素,需要进行sift-up操作,其时间复杂度为O(logN) 构造二叉堆,有两种方式: 一种是比较简单的方式:遍历每个元素进行sift-up,其时间复杂度为O(N...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~