Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

学习笔记

[不是用md写的,直接复制过来了,记录在自己的网易云笔记里的]
数组、链表、跳表
一.数组、链表、跳表的基本实现和特性 数组、链表、跳表: Array 增加/删除 O(n),需要移动数组 Linked List 查找 O(n) skip List 跳表 插入删除搜索 O(logn) 取代平衡树二分查找 跳表元素始终有序 时间复杂度 O(logn) 第k级索引节点个数 假设索引h级,最高级有2节点 n/(2^h) = 2, 也就是h=log2(n)-1 空间复杂度O(n) todo:课后参考文章解读 二.实战题目解析:移动零 题目一定要背诵默写,至少训练营里的题目要会背诵默写 先写思路下来 有些操作形成固定的操作,变成小操作 记录下来,在leetcode里面记录 和在表格里面记录 刷题不能只刷一遍 核心思想:1 升维 2 空间换时间 看完以后 去掉cn去国际站+五毒神掌+主体思想+高级算法模板 三.实战题目解析:3数之和、环形链表 Arrays.sort 的 时间复杂度为nlogn 先和面试官讨论的很好,暴力破解法,哈希表,双指针都先概述一下各种方法都写出来并且分析复杂度,并把最牛逼的解法一气呵成写下来,一定能拿到最高的package 栈、队列、优先队列、双端队列 一.队列和栈的实现和特性 栈 Stack Last in-First out,push加进去,pop取出来 添加删除 O(1) 查询 O(N) boolean empty() 看是否为空栈 E peek() 查栈顶元素,不动 E pop() 取出元素并且返回 E push(E item) 添加元素 int search(Object o)
队列 Queue First in First Out 添加删除 O(1) 查询O(N) Throws exception Returns specialvalue Insert add(e) offer(e) Remove remove poll() Examine elememt() peek() 双端队列:Deque: Double-End Queue 添加删除 O(1) 查询O(N) 【Vector实际上就是一个ArrayList,只不过是线程安全的】 优先队列 Priority Queue 插入操作 O(1) 取出操作 O(logN) 按照元素的优先级取出 底层具体实现的数据结构较为多样和复杂:heap、bst,treap可以有多种不同的实现 看一下 stack和queue的源代码 二.实战题目解析:有效的括号、最小栈等问题 作业
Queue和Priority Queue的源码分析 一个题目如果具有最近相关性 就用栈来解决 要栈实现队列 和 要 队列实现栈的 就用两个 i 和 j 从中间向两边扩散和i和j从两边向中间合,需要很熟练