300分钟搞定算法面试
一、掌握实用的数据结构
1、数组、字符串
数组查询快,增删慢。
leetcode242(字符串转数组,然后用Arrays.sort(str))
2、链表
链表增删快,查询慢。
leetcode25(自顶向下,每k个一反转:递归主函数+反转函数)
3、栈(头进头出)
leetcode20(以右括号为键创建成对的哈希表,再创建一个栈;右括号入的时候判断是否死,死不了就消除,左括号直接加;最后检验栈是否为空)
leetcode739(创建存储索引的递减栈和res数组;先弹栈,后加入的索引处的温度比栈顶处温度大则弹出栈顶,记录索引差,存入res数组;弹栈结束后压栈,比栈顶小则将索引压入,不处理res数组)
4、队列(尾进头出)
5、双端队列:
leetcode239(构建一个递减的双端队列(存索引)和一个res数组;遍历原始数组,把比新加入索引处的数小的,全部弹出;然后加入新的索引;然后把队列头部的不在框内的poll掉;最后把peek处索引的最大元素给res(索引对应要找好))
6、树
遍历:
a、前序遍历:应用在在树里进行搜索;或者创建一个新的二叉树
b、中序遍历:应用二叉搜索树,排好序的
c、后序遍历:从底部往上。
leetcode230(中序遍历,生成递增的列表;第k-1个元素为所求)
二、高级数据结构(这个章节就简单看看吧,先不刷)
1.优先队列(堆)
leetcode347(数为值,次数为键构建哈希表;然后以键的大小建立K大小的小顶堆;最后小顶堆即为所求)
2.图
leetcode(785)
3.前缀树(字典树)
(1)构建
(2)搜索
leetcode212()