十一。设计数据结构
二.设计数据结构
1.LFU
(1)LinkedHashMap,LinkedHashSet。使得链表拥有了随机访问的功能(数组具有随机访问的特点)
(2)LFU算法中可以自顶向下编程,把重要重复代码抽象出来
(3)HashMap.putIfAbsent(key,val)方法
(4)LFU的实现还是挺复杂的,得多看看
2.优先级队列
和单端队列的区别,无论怎样入队,出队的序列是有序的
3.设计循环队列
4.实现栈和队列
实现栈:
(1)开始时:topp=-1(2)入栈:arr[++top]=e(3)出栈:e=arr[top--](4)取栈顶:e=arr[top](5)栈空:top=-1(6)栈大小:size=top+1
***top指向栈顶元素
实现队列:(循环队列)
(1)开始时:front=rear=0(2)入队:rear=(rear+1)%len(3)出队:front=(front+1)%len(4)取队头:front,取队尾:(rear+len-1)%len
(5)队空:front=rear(6)队满:(rear+1)%len=front(7)队长:(rear-front+len)%len
***因为要区分队空和队满,要浪费一个存储单元
***front指向队头元素,rear指向队尾元素的下一个位置
5.实现随机集合
N380 O(1)时间插入,删除和获取随机元素。也是一个设计题
(1)数组可以随机访问元素
(2)java生成随机数
10/17
6.设计哈希集合(N705)
(1)哈希表存的是键值对
(2)哈希表让数组有了随机访问的功能
7.设计哈希映射
(1)处理冲突的方法:拉链法,开放寻址法
(2)INF:infinity。表示无穷的意思(无穷大,无穷小)。int INF=Integer.MAX_VALUE;int INF=Integer.MIN_VALUE