1,庖丁解牛 分解知识点
2,刻意练习 : 越不熟悉的地方越需要练习
3,看高手代码
数组:在内存中是连续不断的一块区域。系统有个内存管理器记录每个数据的下标,直接取就可以 所以时间复杂度是O(1).。
但是因为是连续的一块内存,所以添加,删除的时候时间复杂度是O(n)。n是删除数组后面的数据个数。
链表:单链表,双链表。链表的时间复杂度和数组时相反的。
题目1:反转链表
考验代码实现能力。简洁
题目二:反转相邻两个节点
题目三:给定链表,判断是否有环
1,硬做。一直寻找下一个节点则证明存在环。记住要设置个最大运行时间,比如一秒。不然要跑飞。
2,将走过的点记录set中,如果set存在则证明存在闭环
3,快慢指针:一个指针走一步,一个指针走多步。如果两个指针重合了,就说明存在闭环。
Stack 堆栈(也可以叫栈,但不能叫堆) ,堆时另一种数据结构。先入后出
queen 队列 先入先出
题目:String中有大中小括号,判断括号是否合法
另一种比较差的方法:时间复杂度高
面试题:用队列实现栈&用栈实现队列
思想:做到像队列那样先进先出需要用到两个栈。添加数据的时候存在stack1,需要删除的时候需要将栈1中的数据依次取出存进stack2中。删除的时候从stack2中删除。
再次添加的时候添加到stack1,删除从stack2中删除。但stack2中元素全部删除的时候,再把stack1中数据依次存到stack2中。
反复执行以上步骤
PriorityQuenu 优先队列 :正常入,按照优先级出
堆的种类及相关信息
11.面试题:返回数据流中的第K大元素
数据流是实时变的
方法一:保存K个最大值,每次加入值的时候和以上保存的K个值比较
方法二:小顶堆:每次取堆顶的元素比较,比他还大的话替换并重新排列小顶heap。时间复杂度小很多
12.面试题:返回滑动窗口中的最大值
双端队列的时间复杂度是O(1)。