50道基础数据结构面试题
程序员必备的50道数据结构和算法面试题
在本文中,将分享一些常见的编程面试问题,这些问题来自于不同经验水平的程序员,囊括从刚大学毕业的人到具有一到两年经验的程序员。
编码面试主要包括数据结构和基于算法的问题,以及一些诸如如何在不使用临时变量的情况下交换两个整数这样的逻辑问题?
我认为将编程面试问题划分到不同的主题区域是很有帮助的。我在面试中经常看到的主题区域是数组、链表、字符串、二叉树,以及源于算法的问题(例如字符串算法,排序算法,如 quicksort 或基数排序,以及其他杂项),这就是你能在这篇文章中找到主要内容。
我们无法保证你会被问及这些编程或数据结构和算法问题,但它们会让你充分了解在实际编程工作面试中可预期的各类问题。
一旦你知道了这些问题,你应该有足够的信心参加任何电话或面对面的面试。顺便说一句,如果你对基本的数据结构和算法没有足够了解,或者你多年未接触相关知识,那么尝试这些问题毫无意义。
闲言少叙,下面就是我给出的程序类面试中最常问到的问题清单
数组问题
数组是最常用的基础数据结构,它将元素保存在连续的内存中。它也是面试最喜欢的问题之一,在代码面试中你会经常听到很多关于数组的问题,例如,数组的反转、数组的排序或者查找数组中的一个元素。
数组结构的一个关键优点是在知道索引的情况能够以 O(1) 的复杂度找到一个元素。但是增加或者删除一个元素是很慢的,因为一旦创建了一个数组,你就不能改变它的大小了。
为了创建一个更长或者更短的数组,你需要创建一个新的数组,然后将所有元素从旧数组中复制到新数组中。
解决数组问题的关键是,你要对数组这种数据结构有一个深刻的认识,同时还要了解基本的程序流程如循环、递归以及基本的操作符。
下面是一些经常问到和数组相关的面试题,你可以拿来练习:
1、在一个给定的从1到100的整型数组中,如何快速找到缺失的数字?
2、如何找到一个给定的整型数组中的重复数字?
3、在一个未排序的整型数组中,如何找到最大和最小的数字?
4、在一个整型数组中,如何找到一个所有成对的数字,满足它们的和等于一个给定的数字?
5、如果一个数组包含多个重复元素,如何找到这些重复的数字?
6、用 Java 实现从一个给定数组中删除重复元素?
7、如何利用快速排序对一个整型数组进行排序?
8、如何从一个数组中删除重复元素?
9、用 Java 实现数组反转?
10、如何不借助库实现从数组中删除重复元素?
链表问题
链表是另外一个常见的数据结构,对数组结构是一个补充。和数组类似,它也是一个线性的数据结构,以线性方式存储元素。
不过和数组不同的是,链表的元素不是存储在连续位置中,而是分散在各个内存中的各个位置,通过节点链接起来。一个链表就是一个包含了下个节点内存地址的节点列表。
基于这种结构,可以很容易实现链表中元素的添加和删除,因为只需要改变节点的指向而无需创建一个新的数组。不过链表中的查找是相对困难的,在一个单向链表中需要花费 O(n) 的时间代价来查找一个元素。
链表有几种不同的形式。首先是单向链表,在这个结构你只能向一个方向遍历(向前或者反转);其次是双向链表,你可以双向遍历(向前或者向后);最后是环形链表,组成一个环的形式。
要解决链表问题,你就必须了解递归的相关知识,因为链表是一种递归的数据结构。如果你从链表中去掉一个节点, 剩下的数据结构仍然是链表,因此, 许多链表问题有比遍历更简单的递归解决方案.
下面是一些最常见和流行的链表面试问题
1、在一次遍历中,怎样发现单个链表的中间元素?
2、怎样验证给定的链表是环形的? 怎样发现这个环的起始节点?
3、怎样翻转链表?
4、不使用递归,怎样反转单个链表?
5、在未排序链表中,怎样移除重复的节点?
6、怎样找出单个链表的长度?
7、从单个链表的结尾处,怎样找出链表的第三个节点?
8、怎样使用栈计算两个链表的和?
字符串相关问题
与数组和链表数据结构一起,字符串是编程工作面试中的另一个热门话题。我从未参加过没有问过基于字符串相关问题的编码面试。
字符串的一个优势在于,如果你了解数组,你可以很容易地解决基于字符串的问题,因为字符串仅仅是一个字符数组。
因此,在解决基于数组的编程问题中所学到的所有技术也可用于解决字符串编程问题。
以下是编程求职面试中常见的字符串编程问题:
1、如何输出字符串中的重复字符?
2、如何判断两个字符串是否互为回文?
3、如何从字符串中输出第一个不重复字符?
4、如何使用递归实现字符串反转?
5、如何检查字符仅包含数字字符?
6、如何在字符串中找到重复字符?
7、如何对给定字符串中的元音及辅音进行计数?
8、如何计算给定字符传中特定字符出现的次数?
9、如何找到一个字符串的全排列?
10、在不使用任何库方法的情况下如何反转给定语句中的单词?
11、如何判断两个字符串是否互为旋转?
12、如何判断给定字符串是否是回文?
二叉树问题
到目前为止,我们只研究了线性数据结构,但现实世界中的所有信息无法全部使用线性方式表示,而这正是树数据结构所擅长的地方。
树是一种支持以分层方式存储数据的数据结构。根据你存储数据的方式,有不同类型的树,例如二叉树,其中每个节点最多有两个子节点。
与它的近亲二叉搜索树一起,它们也是最流行的树数据结构之一。因此,你会发现很多基于它们的问题,例如如何遍历它们、计算节点数、查找深度,以及检查它们是否平衡。
解决二叉树问题的一个关键点是对其理论的深刻理解,例如:什么是二叉树的大小或深度,什么是叶节点,什么是节点,以及对流行的遍历算法的理解,例如前序、后序和中序遍历。
下面是一些经常问到的基于二叉树的面试题,你可以拿来练习:
1、二叉搜索树是如何实现的?
2、如何在给定二叉树上实现前序遍历?
3、不使用递归如何按照前序遍历给定二叉树?
4、如何在给定二叉树上实现中序遍历?
5、不使用递归情况下如何使用中序遍历输出给定二叉树所有节点?
6、如何实现后序遍历算法?
7、如何不使用递归实现二叉树的后续遍历?
8、如何输出二叉搜索树的所有叶节点?
9、如何在给定二叉树中计算叶节点数目?
10、如何在给定数组中执行二分搜索?
编程面试问题之杂项
除了基于数据结构的问题之外,大多数编程工作面试还会询问算法、设计、位操作和基于逻辑的常规问题,我将在本节中对其进行介绍。
练习这些概念很重要,因为有时在实际面试中解决这些概念很棘手。提前练习它们不仅能让你熟悉它们,而且还让你更自信地向面试官解释其解决方案。
1、冒泡排序是如何实现的?
2、迭代式快排算法是如何实现的?
3、你如何实现插入排序算法?
4、合并排序算法是如何实现的?
5、桶排序算法是如何实现的?
6、计数排序算法是如何实现的?
7、基数排序算法是如何实现的?
8、在不使用第三个变量的前提下如何交换两个数?
9、如何检查两个矩形是否重叠?
10、如何设计一个自动售货机?
以上这些是数据结构和算法之外的一些最常见的面试问题,可以帮助你在面试中做得很好。
相关文章:
50道基础数据结构面试题
程序员必备的50道数据结构和算法面试题 在本文中,将分享一些常见的编程面试问题,这些问题来自于不同经验水平的程序员,囊括从刚大学毕业的人到具有一到两年经验的程序员。 编码面试主要包括数据结构和基于算法的问题,以及一些诸…...
【Linux基础】权限管理
👻内容专栏: Linux操作系统基础 🐨本文概括: 用户之间的切换、sudo提权、Linux权限管理、文件访问权限的相关方法、目录权限、粘滞位等 🐼本文作者: 阿四啊 🐸发布时间:2023.9.11 …...
C++初阶--类和对象(中)
目录 类的6个默认成员函数构造函数使用方法 析构函数使用方法 拷贝构造函数使用方法 赋值运算符重载赋值运算符重载 const成员 上篇末尾我们讲到了关于c实现栈相较于c语言在传递参数时的一些优化,但实际上,c在 初始化 清理 赋值 拷贝等方面也做了很大程…...
【MySQL系列】视图特性
「前言」文章内容大致是MySQL事务管理。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 视图1.1 视图概念1.2 创建视图1.3 修改互相影响1.4 删除视图1.5 视图规则和限制 视图 1.1 视图概念 视图是一个虚拟表,其内容由查询定义同真实的表一样…...
管理类联考——数学——汇总篇——知识点突破——应用题——最值问题
⛲️ 一、考点讲解 最值问题是应用题中最难的题目,也是考生普遍丢分的题目。最值问题一般要结合函数来分析,一般结合二次函数和平均值定理求解。最值问题的求解步骤是:先设未知变量,然后根据题目建立函数表达式,最后利…...
学习SpringMvc第二战之【SpringMVC之综合案例】
目录 一. 参数传递 1.前期准备工作(替换pom.xml中的部分依赖) 1.1将log4j替换成为slf4j(将打印语句替换成为日志文件输出结果) 2.正式操作 1.基础传参 1.1创建方法,用于验证传参 1.2构建界面回显 1.3设置访问路径(localho…...
【算法日志】单调栈: 单调栈简介及其应用
代码随想录刷题60Day 目录 单调栈简介 单调栈的应用 下次更高温 下一个更大元素1 下一个更大元素2 接雨水 柱状图中最大矩形 单调栈简介 单调栈(Monotonic Stack)是一种特殊的栈数据结构,它满足元素的单调性,这种单调性需…...
VSCode自动分析代码的插件
今天来给大伙介绍一款非常好用的插件,它能够自动分析代码,并帮你完成代码的编写 效果如下图 首先我们用的是VSCode,(免费随便下) 找到扩展,搜索CodeGeeX,将它下载好,就可以实现了 到…...
设计模式之外观模式
文章目录 影院管理项目传统方式解决影院管理传统方式解决影院管理问题分析外观模式基本介绍外观模式原理类图外观模式解决影院管理传统方式解决影院管理说明外观模式应用实例 外观模式的注意事项和细节 影院管理项目 组建一个家庭影院: DVD 播放器、投影仪、自动屏…...
Web端测试和 App端测试有何不同?
Web 端测试和 App 端测试是针对不同平台的上的应用进行测试,Web应用和App端的应用实现方式不同,测试时的侧重点也不一样。 今天这篇文章就来介绍下两者的不同之处以及测试时的侧重点。 同时,我也准备了一份软件测试面试视频教程(…...
12.(Python数模)(相关性分析一)相关系数矩阵
相关系数矩阵 相关系数矩阵是用于衡量多个变量之间关系强度和方向的统计工具。它是一个对称矩阵,其中每个元素表示对应变量之间的相关系数。 要计算相关系数矩阵,首先需要计算每对变量之间的相关系数。常用的相关系数包括皮尔逊相关系数和斯皮尔曼相关…...
系统架构设计师(第二版)学习笔记----嵌入式系统及软件
【原文链接】系统架构设计师(第二版)学习笔记----嵌入式系统及软件 文章目录 一、嵌入式系统1.1 嵌入式系统的组成1.2 嵌入式系统的特点1.3 嵌入式系统的分类 二、嵌入式软件2.1 嵌入式系统软件分层2.2 嵌入式软件的主要特点 三、安全攸关软件的安全性设…...
Python列表操作指南:索引、切片、遍历与综合应用
文章目录 列表简介创建列表索引和切片列表的长度列表的拼接和重复检查元素是否存在列表的方法index() 方法count() 方法 列表的修改和删除修改元素删除元素列表的排序和反转添加元素 列表的拷贝列表的遍历列表的切片列表的嵌套列表推导式 python精品专栏推荐python基础知识&…...
第15章_锁: MySQL并发访问相同记录以及从数据操作的类型划分锁(读锁、写锁)
事务的 隔离性 由这章讲述的 锁 来实现。 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在程序开发中会存在多线程同步的问题, 当多个线程并发访问某个数据的时候, 尤其是针对一些敏感数据(订单, 金额), 我们就需要保证这个数据在任何时刻最多只有一个线…...
PHP 排序函数使用方法,按照字母排序等操作
详解PHP排序方法使用 一、sort() 函数 用于对数组单元从低到高进行排序。 //数组 $data array(D,F,A,C,B); //排序 sort($data); //输出排版标签 echo "<pre>"; //打印数据 print_r($data);die;输出结果: 二、rsort() 函数 用于对数组单元从高到…...
windows本地验证码识别工具
windows本地验证码识别小工具 - 可以用在windows系统中,并可以集成在Java或python程序中 演示视频如下:可用于识别4-7位的字母数字组合的验证码(识别准确率在70% - 80%)。 验证码识别演示 本项目未开源,如需使用请联…...
修改图片尺寸的几个简单方法
修改图片尺寸的几个简单方法~~图片,是我们常用的文件格式,也是日常生活与工作中重要的文件。图片记录了非常多的元素和内容,其中不乏有工作上的内容,也有对一些日常生活的记录。所以说,图片文件对我们来说是非常重要的…...
三、GoLang字符串的基本操作
一、转义符是什么? 转义字符意义\n换行,将当前位置移动到下一行开头\r回车,将当前位置移到本行开头\t相当于一个Tab键\\代表一个反斜线“\”\"代表一个双引号字符 代码实战 package mainimport "fmt"/* *字符串基本用法 */ func main…...
基于vue-cli创建后台管理系统前端页面——element-ui,axios,跨域配置,布局初步,导航栏
目录 引出安装npm install安装element-ui安装axios 进行配置main.js中引入添加jwt前端跨域配置 进行初始布局HomeView.vueApp.vue 新增页面和引入home页面导航栏总结 引出 1.vue-cli创建前端工程,安装element-ui,axios和配置; 2.前端跨域的配…...
在 ubuntu20.04 上安装 Pytorch
参考资料:https://www.linode.com/docs/guides/pytorch-installation-ubuntu-2004/ sudo apt update sudo apt install nvidia-cuda-toolkit (3G) mkdir anaconda cd ~/anaconda wget https://repo.anaconda.com/archive/Anaconda3-2020.11-Linux-x86_64.sh chmod …...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
