数据结构与算法面试考点总结—程序员面试金典

本文总结了程序员面试中的数据结构与算法重点,包括数组与字符串、链表、栈与队列、树与图、位操作、智力题、数学与概率、面向对象设计、递归与动态规划、排序与查找等。详细阐述了各种数据结构的使用场景、操作技巧,并提及了面试中可能遇到的智力问题和编程语言相关知识点。
摘要由CSDN通过智能技术生成

0. 前言

简要总结面试或工作中最常用的数据结构和算法以及一些容易忽略但是重要的细节。内容主要包括:数组与字符串;链表;栈与队列;树与图;位操作;智力题;数学与概率;面向对象设计;递归与动态规划;扩展性与存储型限制;排序与查找;测试;C++重要知识点;Java重要知识点;数据库;线程与锁;后续会针对一些典型题目进行题解说明。

1. 数组与字符串

  • 散列表:一种将键映射为值从而实现快速查找的数据结构。平均查找时间复杂度为O(1),因此在算法题目中可以考虑使用其来优化复杂度。建议仔细看看Java中关于HashMap的源码,了解其内部原理。
  • Arraylist:动态数据,可以自动实现扩容操作。
  • StringBuilder:进行字符串拼接操作,需要进行多次字符串拼接时可以考虑使用它。

2. 链表

  • 创建链表:可以采用头插法和尾插法的方式,一定要注意指针的指向;
  • 删除链表中的结点:单向链表和双向链表的操作,注意指针的变化;注意:空指针;必要时需要更新head和tail指针;
  • 快慢指针使用:可以用来获取中间节点;判断链表是否有环等;

3. 栈与队列

  • 栈:先进后出的数据结构,可以用来解决括号匹配问题;
  • 队列:先进先出的数据结构,有双端队列这种变种,可以在两端进行数据进出;
  • 要能够用两个队列实现栈,用两个栈实现队列;具体实现思路自己可以手动在纸上验算;

4. 树与图

  • 树需要注意的问题:是二叉树还是二叉排序树(一般对于二叉排序树里面的数据不重复,左子树小于根节点,右子树大于根节点);平衡与不平衡(AVL是严格平衡,B树是不严格平衡);是否是完全二叉树(叶子节点只能出现在最底层)或者满二叉树;
  • 二叉树的遍历,要能够分别使用递归和非递归(栈)的方式进行二叉树的前序遍历、中序遍历和后序遍历;
  • 了解平衡二叉树和红黑树以及B树的使用场景、特点和区别;
  • 单词查找树(trie树)用于前缀问题处理;
  • 图的遍历:DFS和BFS,一定要掌握。
// DFS
void dfs(Node root){
   
	if(root == null){
   
		return;
	}
	// 处理当前节点
	visit(root);
	// 标记当前节点已经遍历过
	//此处需要注意,如果需要回溯,则处理完当前节点后需要还原为false
	root.visited = true;
	// 对每个相邻的元素都进行查找
	for(Node n : root.adjacent){
   
		if(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值