【实习秋招篇之数据结构与算法】

一、 时间复杂度和空间复杂度

1、时间复杂度:算法流程中,常数操作数量的指标。 只有高阶项,不要低阶项,系数为1。
2、空间复杂度:算法流程中,额外分配的空间关于输入规模的函数。

二、 字符串

KMP算法:核心思想是计算模式串相等的最长前后缀信息并保存在Next数组中。每次匹配失败后,主串匹配位置不变,模式串的匹配位置由next决定,就是next[当前位置]。本质上就是利用之前的匹配信息来加速当前匹配过程。

三、 二叉树

  1. 遍历算法
    前序遍历、中序遍历、后序遍历:递归算法和非递归算法;非递归遍历算法需要使用栈。
    层序遍历算法:队列。
  2. 序列化与反序列化
    序列化是指通过遍历算法,将二叉树记录到文本文件中。需要添加结束符和空结点的表示。
    反序列化是指通过遍历算法重构二叉树。首先应该将文本文件转换为字符数组。

1、平衡二叉树

定义:二叉树中每一个结点,各自左子树的深度与各自右子树的深度的差不大于1。

案例1、给定一棵二叉树的头结点,判断一棵树是否是平衡二叉树。
递归解法:
1、左子树是否为平衡二叉树;
2、左子树的深度,LH;
3、右子树是否为平衡二叉树;
4、右子树的深度。 时间复杂度为O(n)。

2、搜索二叉树

定义:每棵子树头结点的值都比各自左子树上所有结点的值要大,也都比各自右子树上所有结点的值要小
搜索二叉树中序遍历得到的序列,一定是从小到大排列的。红黑树、平衡搜索二叉树等,都是搜索二叉树的不同实现。

案例:给定一棵树的头结点,判断一棵树是不是搜索二叉树。
非递归思路:改写二叉树的中序遍历;遍历到每一个结点的值时,如果一直比上一个遍历结点的值要大,则是搜索二叉树;否则,不是搜索二叉树。

AVL与红黑树
1、AVL是一棵高度平衡二叉搜索树,适用于查找次数多,插入删除次数少的的场景。因为维持AVL的平衡比较耗时,时间复杂度为logN。
2、红黑树是弱平衡二叉树,任何一条路径长度不会大于其他路径长度的两倍。应用于频繁查找、插入、删除操作的场景。维持红黑树的平衡时间复杂度为O(1)。STL中的map,set,multimap,multiset。

3、红黑树的特点

1、每个结点非黑即红;
2、根结点和空指针结点为黑色;
3、父结点为红色,子结点必须为黑色,即不能有两个相邻的红结点;
4、从任意结点到空结点的路径中黑色结点的数量相同。

4、满二叉树与完全二叉树

定义:满二叉树是除了最后一层的结点无任何结点外,剩下每一层的结点都有两个结点。

完全二叉树是除了最后一层之外,其他每一层都是满的;如果最后一层也满了,是一个满二叉树;如果最后一层不满,缺少的结点全部集中在左边,那也是一棵完全二叉树。
案例:给定一棵二叉树的头结点,判断一棵树是不是完全二叉树。
改需层序遍历。
1、前驱结点与后继结点
一个结点的前驱结点和后继结点,是指该节点在中序遍历序列中的上一个结点和下一个结点。
案例:二叉树的子结构和子树(拓扑结构)问题。
拓扑结构

四、 位运算

1、左移乘2,右移除2;
2、交换两个整数,多次异或;
3、消除最后一个1:将一个整数减去1再与上原来的整数,得到的结果相当于把整数的二进制表示中最右边的1变成0;
4、不用加减乘除完成整数相加。

五、 Map与Hash_map

Map存储键值对,按照关键字的某种顺序存储;查找时间复杂度为O(logN)。
Hash_map存储键值对,将关键字按哈希函数映射到存储地址;查找时间复杂度为O(1)。
哈希函数的特点:

1、输入无穷;
2、输出有穷;
3、相同输入,相同输出;
4、不同输入,相同输出;
5、离散型:当输入很大时,对于不同的输入,在输出域上均匀出现他们的返回值。

六、 排序算法

十大经典排序算法

  1. 冒泡算法:依次比较交换相邻两个元素的位置。
  2. 选择排序:
  3. 插入排序:插牌
  4. 归并排序:时间复杂度O(n*logn),空间复杂度O(n)
  5. 快速排序:
    经典快排:选取数组末尾的元素作为分界值,划分为小于等于该分界值和大于该分界值的两个部分。
    改进快排:划分为小于分界值,等于分界值,大于分界值三个部分。时间复杂度:最好O(n),O(nlogn),最坏O(n2);空间复杂度O(logn)
    随机快排:随机选取一个元素作为分界值,划分为三个部分。时间复杂度O(n
    logn),空间复杂度O(logn)
  6. 堆排序
    堆是一棵完全二叉树;大顶堆:每棵子树的头结点是最大的值;小顶堆:每棵子树的头结点是最小值;创建堆结构的时间复杂度O(n)。

综合排序算法

基本有序:冒泡、插入 无序:快排、堆排、归并 与初始序列无关:选择排序
综合排序首先判断元素的数据类型,基础类型用快排(不稳定),非基础类型用归并。因为基础类型不用区分原始顺序,非基础类型具有个体差异性。
小规模:插入排序。小规模情况下,O(n2)的劣势表现不出来;同时,插入排序的常数项很低,使得小规模插入排序很快。
参考

七、 查找算法

  1. 二分查找
  2. 哈希查找
    Map与Hash_map的比较
    Map:将key-value按key的某种顺序存储。利用二分查找算法查找,时间复杂度为O(logN)。底层数据结构为红黑树。
    Hash_map:利用hash函数将key映射成存储地址。查找算法时间复杂度为O(1)。牺牲空间换取空间,底层数据结构为hash表。
  3. 二叉树查找

八、 递归与循环

定义:递归是在一个函数内部调用函数自身,是一种自上而下的思维方式。循环是通过设置计算的初始值和终止条件,在范围内重复运算,是一种自下而上的思维方式。

递归与循环的区别:

  1. 递归优点:代码简洁
  2. 递归缺点: 1、 效率低;保存临时变量需要分配空降,出栈入栈需要消耗时间,可能存在重复计算; 2、调用栈溢出。 案例:斐波那切数列

九、 动态规划与贪心算法

  1. 动态规划的三个特点
    1、求解最优解问题
    2、问题可以分解成若干子问题
    3、子问题之间有重叠更小子问题
  2. 动态规划的求解
    自上而下的分析问题,自下而上的解决问题。递归的思路分析问题,循环的方式解决问题。
  3. 动态规划与贪心算法的区别
    动态规划需要尝试所有的可能,选出最优的解法;
    贪心算法在每一步中做出贪婪的选择,基于这个选择,能够得到最优解。

十、 面试编程题

  1. 矩阵相乘
  2. 最大的k个数
    第一种排序算法,时间复杂度为O(nlogn);
    第二种利用快排中的partition函数,时间复杂度为O(n)。缺点是partition函数会修改数组,调整元素顺序。
    第三种创建一个大小为k的容器存储最大的k个数字,依次读取数组中的元素。容器中的数字小于k时直接放入容器;大于k时,进行元素替换。小顶堆是一个合适的数据结构,优先级队列和红黑树。
  3. 和大于N的最小连续数组
    第一种最直观的方法,分别得到以数组中第i个元素为首的和大于N的最小连续数组,时间复杂度为O(n2)。
    第二种是动态规划方法,首先计算以数组第一个元素为首的和大于N的最小连续数组;然后连续数组去掉第一个元素,并继续添加数组中的后续元素,当子数组和大于N时,比较上次子数组的长度,保存最小值。遍历完数组,程序结束。
int FindLeastSunOfSubArray(int* pData, int size, int N) {
	if (pData == nullptr || size <= 0) {
		return -1;
	}
	int start = 0;
	int result = 1024;
	int temp_length = 0;
	int sum = 0;
	for (int i = 0; i < size; i++) {
		while (sum > N) {
			if (temp_length < result) {
				result = temp_length;
			}
			sum -= pData[start++];
			temp_length--;
		}
		sum += pData[i];
		temp_length++;
	}
	return result;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CVTEAI算法实习生的面试过程中,面试官主要关注的是候选人的项目经历和算法知识。根据引用\[1\]和引用\[2\]的内容,面试官会问一些关于实习内容、项目经验和算法问题的问题。例如,面试官可能会询问候选人在实习期间参与的项目内容、项目中选择的模块依据、后处理方法、算法实现等方面的问题。此外,面试官还可能会问一些常见的算法问题,如二叉排序树的插入、数据集标签设计、人脸识别项目、模型融合等。引用\[3\]中提到的华为面试中,面试官还会问一些关于构造函数、析构函数、封装、继承、多态、虚函数等面向对象编程的问题,以及对数据结构算法的了解程度。 综上所述,CVTEAI算法实习生的面试过程主要关注候选人的项目经历和算法知识。候选人需要准备好对实习内容、项目经验和常见算法问题的回答,并对面向对象编程、数据结构算法有一定的了解。 #### 引用[.reference_title] - *1* *2* *3* [2022届计算机视觉算法秋招面经(CV岗)——offer经](https://blog.csdn.net/qq_41375609/article/details/120942607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值