weberrr / LeetCodeRepo_summary

summary for leetcode top200 (java)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

1. 数组

1.1 数组特性

数组是一种线性表结构,它用一组连续的内存空间,来存储相同类型的数据。

Java中数组的定义:

(1) int[] list = new int[10]; # 固定大小

(2) List<Integer> list = new ArrayList<>(); # 支持动态扩容

list

List类常用的方法:

  1. .add(num) & .addAll( {num1,num2} ) //添加元素
  2. .remove(num) & .removeAll( {num1,num2} ) //移除元素
  3. .contains(num) & .containsll( {num1,num2} ) //包含元素
  4. .size() //大小
  5. .toArray() //转数组

1.2 相关LC题目

2. 链表

2.1 链表特性

常用的链表有:单链表、双向链表、循环链表

Java中链表的定义:

(1) 自己定义:

class ListNode{
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

(2) LinkedList<Integer> linkedList = new LinkedList<>(); # 双向链表

list

2.2 相关LC题目

3. 栈

3.1 Java中的Stack类

如图所示,Stack来自于Vector,那么显然Stack的底层实现是数组。

stack

属于stack自己的方法包括:

  1. .push(num) //入栈
  2. .pop() //栈顶元素出栈
  3. .isEmpty() //判定栈是否为空
  4. .peek() //获取栈顶元素
  5. .search(num) //判端元素num是否在栈中

3.2 相关LC题目

4. 队列

4.1 Java中的Queue类

常用的有双端队列 Deque, 优先队列 PriporityQueue, 双向链表 LinkedList, 阻塞队列 BlockingQueue:

Queue

Queue的方法有:

  1. .add(num) = .offer(num) //添加元素
  2. .poll() = .remove() //移除并返回头部
  3. .peek() = .element() // 返回队列头部的元素
  4. .put() //阻塞队列添加元素,如果队列满,则阻塞
  5. .take() //阻塞队列移除元素并返回头部,如果队列为空,则阻塞

4.2 相关LC题目

5. 哈希表

5.1 Java中的Map类

map

Map 类没有继承Collection接口,提供key-value键值对映射。

常用子类

  • HashMap:内部结构为哈希表+红黑树,异步处理(线程不安全),K和V都允许为null;
  • Hashtable:内部结构为哈希表,同步(性能低),K和V都不允许为null;
  • TreeMap:基于红黑树,异步处理,K不允许为null,K有序;

常用方法

  • .containsKey(x):是否含有key - O(1)
  • .containsValue(x):是否含有value - O(n)
  • .get(key): 获取key对应的值
  • .put(key, value):放入k-v
  • .remove(key):删除k-v
  • .clear():清空
  • .keySet():获取key的Set集合
  • .values():获取value的Collection集合
  • Entry<K,V>:一个k-v对
  • .entrySet():k-v对的Set集合

5.2 相关LC题目

6. 排序与查找

6.1 总结

排序:

排序算法 时间复杂度 空间复杂度 是否稳定排序 是否原地排序
冒泡排序 O(n^2) O(1)
插入排序 O(n^2) O(1)
选择排序 O(n^2) O(1)
归并排序 O(nlogn) O(n)
快速排序 O(nlogn) O(logn) :递归栈
桶排序 O(n) O(k)
计数排序 O(n+k) O(k)
基数排序 O(dn) O(k)

查找:

有序数组的二分查找以及其变型

6.2 排序LC题目

7. 贪心算法

贪心算法解题步骤:

  1. 定义贪心问题:针对一组数据,定义了限制值和期望值,希望从中选几个数据,在满足限制值情况下,期望值最大。
  2. 尝试贪心算法:每次选择对限制值相等贡献量情况下,期望值最大的数据。
  3. 举例查看是否最优。

7.1 相关LC题目

8. 分治算法

分治算法解题步骤:

  1. 分解:将原问题分解为一系列子问题
  2. 解决:递归的求解各个子问题
  3. 合并:将子问题合并为原问题

8.1 相关LC题目

9. 回溯算法

回溯算法解题步骤: ORT原则

22. 括号生成 来说明:

  1. 选择(Options):每次回溯有 (,) 两种选择;
  2. 限制(Restraints)):如果left_num < right_num,表明左括号用得多,可以加右括号也可以加左括号;如果left_num = right_num,表明左右用的一样多,只可以加左括号。
  3. 结束(Termination): 如果 left_numright_num 都为0,则括号用完。

9.1 相关LC题目

10. 动态规划算法

动态规划解题步骤:状态方程法

  1. 找到最优子结构
  2. 写状态转移方程

10.1 相关LC题目

About

summary for leetcode top200 (java)


Languages

Language:Java 100.0%