其他数据结构
栈队列等
爱抖腿的嘻嘻嘻
这个作者很懒,什么都没留下…
展开
-
字典树3.输出频率前k的单词(字典树+treemap)
这个list简直了,很厉害。import java.util.*;public class Main { public static void main(String[] argc){ String[] reviews={"i love python and cpp", "i love java", "i love python more than go but go is nice as well", "python is great", "i love cpp", "i原创 2021-04-12 18:55:23 · 386 阅读 · 0 评论 -
前缀树2.前缀树实现
class Trie { class trieNode{ trieNode[] next; boolean isEnd; public trieNode(){ next=new trieNode[26]; isEnd=false; } } trieNode root; /** Initialize your data structure here. */原创 2021-02-19 08:47:27 · 127 阅读 · 0 评论 -
前缀树(字典树)1.单词替换
需要把一个句子中的单词全部替换为它的前缀,前缀越短越好则可以使用前缀树,将前缀存到树中,在树上找单词的最短前缀。字典树TrieNode可以自己定义,保存一些字符串与值的关系,类似hashmap,都是key-value映射,只不过TrieNode的key只能是字符串时间复杂度非常低,插入和查询都是O(k),但空间复杂度高。里面可以有三个量,分别是count来统计单词前缀出现的次数,next是一个指向子节点的数组(其中有26个位置来存26个字母),还有count表示到这是否存这一个完整的单词。也就是说它原创 2021-01-28 16:52:13 · 136 阅读 · 1 评论 -
LRU缓存机制
设计一个存储key-value的值,需要能get到对应key的值,在存储的时候如果关键字存在则变更,如果不存在则存储,如果容量满了则删除最久没使用的值,会用到一个哈希表和一个双向链表,用哈希表来存储键值对,用双向链表来存储使用顺序。越靠近头部越是最近使用的,使用也就一位这使用了get()get时如果哈希表不存在key则返回-1,如果存在则得知在双向链表中的下标,将它移动到头部并返回。put时如果key不存在则创造一个新的节点。并在双向链表的头部添加该节点(使用意味着添加和返回都算),并将其添加到哈希表中原创 2021-02-16 17:50:51 · 112 阅读 · 0 评论 -
并查集--岛屿数量200
利用并查集来实现岛屿数量,这种连通性的问题都可以通过深度优先或者广度优先或者并查集来解决。深度优先遍历的过程会会建立一个visited表来记录已经遍历到的节点,没有遍历过才会继续遍历,没有遍历过且这个点的值为1,则可以通过dfs算法来找到与这个点连成一个岛的点,遍历结束后使得count++,然后遍历完每一个点之后就会找到所有的岛的数量。进入dfs之后就将这个点标记为已访问过,然后for循环四次来遍历它周围的四个点,如果不越界,是陆地,没有被访问过则dfs。class Solution { i原创 2021-02-01 14:08:55 · 162 阅读 · 0 评论 -
并查集--使数组唯一的最小增量945
可以让数组中的某个数加1,求加几次之后数组中所有的数都是唯一的。先将数组排序,现在遍历数组,如果当前数大于等于前一个数加1,则说明不用处理,令前一个数等于当前数,如果小于前一个数加1,则要把它变到前一个数加1,并把前一个数变成前一个数加1.class Solution { public int minIncrementForUnique(int[] A) { if(A==null || A.length<2)return 0; Arrays.sort(A);原创 2021-01-19 22:55:12 · 100 阅读 · 0 评论 -
栈队列互相实现
用两个栈实现队列实现先进先出也就是先往第一个里放,要输出的时候,如果第二个栈有值则输出,如果没有则把第一个栈所有的都输出到第二个里,然后输出第二个栈的第一个元素public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push原创 2020-11-11 20:48:01 · 70 阅读 · 0 评论 -
包含min函数的栈
要求实现min,push,pop都是O(1)思路就是创造一个辅助栈,每次在添加新元素的时候都更新一下辅助栈中的数据。所以实现O(1)的min需要一个O(n)空间复杂度的辅助数组。import java.util.Stack;public class Solution { Stack<Integer> s=new Stack<Integer>(); Stack<Integer> min=new Stack<Integer>();原创 2020-11-26 08:21:41 · 96 阅读 · 0 评论 -
判断栈中一个序列是否是另一个序列的弹出序列
栈的弹出压入队列通过举例子来找规律,遍历整个弹出序列首先建立一个栈,把数字压入栈中,由于在输入到一半的时候就可能输出,所以在里面建立一个while循环,如果发现此时的栈顶值是输出数组的当前值,就pop,数组索引也向后。当压入结束之后,如果数组索引没有到头,说明不能全部输出。注意成功条件是数组2的索引j==popA.length 因为最后一下也加上去了import java.util.ArrayList;import java.util.Stack;public class Solution原创 2020-11-26 09:13:56 · 121 阅读 · 0 评论