
数据结构与企业题库精讲
文章平均质量分 92
大厂题库,笔试面试算法题精讲,通过408课程、结合工作经验,深入浅出,适合各个层次的人学习
小 明
2022博客之星TOP3/博客专家/优快云后端内容合伙人、InfoQ(极客时间)签约作者。8年开发经验,就职知名金融互联网大厂后端研发专家,专注于面试、后端、源码、架构、算法,擅长高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。
文章底部联系 -> 商务合作 | 技术交流 | 粉丝福利
展开
-
【算法面试】在排序数组中查找元素的第一个和最后一个位置:详细题解
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。原创 2024-06-25 10:30:00 · 1944 阅读 · 3 评论 -
【算法面试】二分查找:如何在有序数组中高效搜索目标值
二分查找是一种高效的查找算法,其时间复杂度为O(log n),非常适用于大规模有序数组的查找任务。通过本文展示的多种实现方法,你可以灵活选择适合自己场景的实现方式。此外,理解并掌握二分查找的基本原理和细节,将会对提升你的编码能力和解决问题的效率大有裨益。希望这些方法能够帮助你顺利解决问题,确保程序顺利运行。!!博主v:XiaoMing_Java嗨,大家好,我是小 明(小明java问道之路),原创 2024-06-24 03:45:00 · 4138 阅读 · 9 评论 -
【算法面试】搜索插入位置:如何在排序数组中高效查找目标值的索引或插入位置
搜索插入位置的问题非常适合使用二分查找算法,因为其时间复杂度为O(log n),能够在大规模有序数组中高效地查找目标值的索引或插入位置。本文展示了多种实现方法,包括标准二分查找、递归二分查找以及带调试信息的版本,以帮助读者更好地理解并应用这种算法。希望这些方法能够帮助你解决实际开发中的问题,确保程序顺利运行。!!博主v:XiaoMing_Java嗨,大家好,我是小 明(小明java问道之路),原创 2024-06-24 09:15:00 · 5870 阅读 · 10 评论 -
【算法面试】队列算法笔试面试全解(金三银四面试专栏启动)
本文中的例题,采用数组与链表实现队列、用两个栈实现队列、设计循环双端队列、滑动窗口最大值,这几道题完全满足面试中队列的要求。原创 2023-01-23 23:33:02 · 964 阅读 · 5 评论 -
【算法面试】堆算法笔试面试全解(金三银四面试专栏启动)
本文针对堆算法笔试,首先图解大根堆,了解大根堆的概念以及创建堆的过程。题目选择,最小的K个数、设计一个找数据流中第 k 大元素的类、数组中的第 k 大的数字为简单和中等题目。原创 2023-02-05 19:09:31 · 2754 阅读 · 7 评论 -
【算法面试】栈算法笔试面试全解(金三银四面试专栏启动)
栈在面试中考点比较单一,本文中的例题:采用数组与链表实现栈、实现 min 函数的栈(O(1)求栈中最小元素)、用两个栈实现队列、有效括号序列,这几道题完全满足面试要求。原创 2023-01-20 00:39:27 · 548 阅读 · 1 评论 -
【算法面试】链表算法笔试面试全解(金三银四面试专栏启动)
面试专题,本文挑选面试链表结构的15道高频面试题,链表的插入和删除、从链表中删除重复数据、找出单链表中的倒数第k个元素、反转链表、k个一组翻转链表、链表指定区间反转、递归从尾到头输出单链表、寻找单链表的中间结点、检测一个链表是否有环(判断环形链表)、删除指定结点、判断两个链表是否相交、合并两个排序的链表、合并k个已排序的链表、链表相加(二)、单链表的排序O(nlogn)、判断一个链表是否为回文结构。原创 2023-01-19 16:38:18 · 606 阅读 · 2 评论 -
【算法面试】算法在面试中考察的是什么(金三银四面试专栏启动)
本文作为算法面试专栏的启动,说明了算法面试是什么,推理在算法面试中的重要性,算法是面试的一环而非全部还需要准备很多东西,以及算法面试的准备范围。原创 2023-01-08 18:20:47 · 701 阅读 · 6 评论 -
Re:从零开始的DS生活 轻松从0基础写出链表LRU算法
本文从ds概念说起,详细介绍了顺序表(数组)和链表的相关知识与源码解析,并配合LRU链表实战,文内有大量练习,适合点赞+收藏。有什么错误希望大家直接指出~原创 2020-04-26 20:57:24 · 7061 阅读 · 1 评论 -
Re:从零开始的DS生活 轻松和面试官扯一个小时栈
详细介绍了栈的概念和性质,简要的介绍了栈ADT并附两种实现方式(链式、顺序),列举LeetCode第20题与严蔚敏老师栈和递归的讲解加深对栈的应用,供读者理解与学习,适合点赞+收藏。有什么错误希望大家直接指出~原创 2020-06-14 16:08:42 · 5918 阅读 · 1 评论 -
Re:从零开始的DS生活 轻松从0基础实现多种队列
本文详细介绍了队列的概念和性质,简要的介绍了队列ADT并附三种实现方式(链式、顺序api、顺序+动态扩容),对循环、双端、阻塞、优先级队列进行简单的应用与jdk源码分析,供读者理解与学习,适合点赞+收藏。有什么错误希望大家直接指出~原创 2020-06-04 19:54:06 · 10371 阅读 · 0 评论 -
Re:从零开始的DS学习之查找算法
本文从顺序查找->二分查找>hash查找->BST树->优先队列->堆,帮你打开查找算法的新世纪,深入浅出,适合各个阶段的人查阅与学习,本篇篇幅较长,适合点赞+收藏。有什么错误希望大家直接指出~原创 2020-07-11 21:18:27 · 5511 阅读 · 1 评论 -
Re:从零开始的DS生活 轻松从0基础写出Huffman树与红黑树
本文详细介绍了树的概念和术语,并配合两种树的遍历算法来进行理解。文内附有800行的详细代码实现Huffman树和红黑树,供读者理解与学习,适合点赞+收藏。有什么错误希望大家直接指出~原创 2020-05-27 10:21:50 · 6820 阅读 · 0 评论 -
Re:从零开始的DS学习 十大排序算法我都整理好了
本文详细介绍了冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序、外部排序的算法流程和源码。供读者理解与学习,适合点赞+收藏。有什么错误希望大家直接指出~原创 2020-07-05 20:43:33 · 6248 阅读 · 1 评论 -
Re:从零开始的DS生活 图论学这一篇就够了
详细介绍了图的基本概念;图的存储结构,邻接矩阵,邻接表;图的遍历,广度度优先遍历和深度优先遍历;最小生成树基本概念,Prim算法,Kruskal算法;最短路径问题,Dijkstra算法,Floyd算法;拓扑排序。供读者理解与学习,适合点赞+收藏。有什么错误希望大家直接指出~原创 2020-06-27 18:45:58 · 6708 阅读 · 0 评论 -
LeetCode24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]/** * @author mac * @date 2020/11/10-9:14 */public class t24_两两交换链表中的节点 { /** * 递归原创 2020-11-10 22:59:24 · 727 阅读 · 0 评论 -
LeetCode189.旋转数组
给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释:向右旋转 1 步: [99,-1,-100,3]...原创 2020-11-14 13:59:26 · 621 阅读 · 0 评论 -
LeetCode25. K 个一组翻转链表
给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的...原创 2020-11-12 22:36:15 · 547 阅读 · 0 评论 -
LeetCode13.罗马数字转整数
题目描述:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两...原创 2019-06-12 11:41:09 · 812 阅读 · 0 评论 -
LeetCode452. 用最少数量的箭引爆气球(20201123每日一题)
解题思路:贪心算法(思想),排序+找最大交集import java.util.Arrays;import java.util.Comparator;/** * @author mac * @date 2020/11/23-14:47 */public class t452_用最少数量的飞镖扎爆气球 { /** * 用气球头升序(用气球尾排序也类似) * * @param points * @return count */原创 2020-11-23 16:24:19 · 724 阅读 · 0 评论 -
LeetCodet283.移动零
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。import java.util.Arrays;/** * 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 * 示例: * 输入: [0,1,0,3,12] * 输出: [1,3,12,0,0]...原创 2020-11-02 21:33:46 · 564 阅读 · 0 评论 -
LeetCode11.盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49/...原创 2020-11-02 21:54:08 · 607 阅读 · 0 评论 -
LeetCode7.整数反转
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: -123输出: -321示例 2:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。解题思路:一、寄几个的low方法:...原创 2019-06-04 15:53:35 · 743 阅读 · 0 评论 -
LeetCode1. 两数之和
题目描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1...原创 2019-05-30 13:00:51 · 790 阅读 · 0 评论 -
LeetCode70.爬楼梯
假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶/** * @author mac * @date 2020/...原创 2020-11-02 22:33:41 · 609 阅读 · 0 评论 -
LeetCode26.删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原...原创 2020-11-12 22:48:19 · 555 阅读 · 0 评论 -
LeetCode206.反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?/** * @author mac * @date 2020/11/9-19:39 */public class t206_反转链表 { class ListNode { int val; ListNod原创 2020-11-09 20:33:27 · 605 阅读 · 0 评论 -
LeetCode141.环形链表
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0原创 2020-11-09 19:19:32 · 549 阅读 · 0 评论 -
【每日一题】LeetCode162. 寻找峰值【一题三解建议收藏(暴力/模拟/二分法)】
LeetCode162. 寻找峰值【中等Medium】写在前面:本质上就是找到数组中极大值(比前后卷(大)的值),然后返回,简单难度题目描述:A peak element is an element that is strictly greater than its neighbors.Given an integer arraynums, find a peak element, and return its index. Ifthe array contains multiple p...原创 2021-09-15 14:04:30 · 496 阅读 · 0 评论 -
LeetCode142.环形链表II
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用O(1)空间解决此题?龟兔赛跑(快慢指针)法:/** * @author mac * @date 2020/11/11-19:54 */pub...原创 2020-11-11 20:37:00 · 584 阅读 · 0 评论 -
LeetCode21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/** * @author mac * @date 2020/11/14-14:00 */public class t21_合并两个有序.原创 2020-11-14 15:44:51 · 683 阅读 · 0 评论 -
LeetCode15.三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]import java.util.*;/** * @author mac * @date 2020/11/5-2...原创 2020-11-06 23:46:55 · 704 阅读 · 0 评论 -
LeetCode9.判断回文数
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因...原创 2019-06-04 18:30:06 · 851 阅读 · 1 评论 -
LeetCode1122. 数组的相对排序(20201114每日一题)
给你两个数组,arr1 和arr2,arr2中的元素各不相同arr2 中的每个元素都出现在arr1中对 arr1中的元素进行排序,使 arr1 中项的相对顺序和arr2中的相对顺序相同。未在arr2中出现过的元素需要按照升序放在arr1的末尾。示例:输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]输出:[2,2,2,1,4,3,3,9,6,7,19]提示:arr1.length, arr2.len...原创 2020-11-14 12:12:45 · 643 阅读 · 0 评论 -
LeetCode15.三数之和
题目描述:给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]例如,...原创 2019-06-12 11:04:35 · 820 阅读 · 0 评论 -
【算法社区】训练准备和复杂度分析
本文介绍了学习算法和数据结构的方法和准备工作,介绍了学习算法的一些必要的专业名词等等原创 2022-07-04 19:29:43 · 1115 阅读 · 41 评论 -
【算法社区】算法笔试押题(罗马数字转整数、判断字符串是否唯一、无重复字符的最长子串)
【2022/03/19】力扣押题推荐(罗马数字转整数、判断字符串是否唯一、无重复字符的最长子串)原创 2022-03-19 23:08:16 · 256 阅读 · 0 评论 -
【算法社区】算法笔试押题(两数之和、存在重复元素、LRU缓存)
【2022/03/18】力扣押题推荐(两数之和、存在重复元素、LRU缓存)原创 2022-03-18 23:03:32 · 417 阅读 · 0 评论 -
【算法社区】算法笔试押题(相交链表、环形链表2、合并K个升序链表)
【03/17】力扣押题推荐(相交链表、环形链表2、合并K个升序链表)原创 2022-03-17 23:42:54 · 687 阅读 · 0 评论 -
【算法社区】算法笔试押题(反转链表、删除链表的倒数第N节点、K个一组翻转链表)
3月16日力扣押题推荐(反转链表、删除链表的倒数第N节点、K个一组翻转链表)原创 2022-03-16 23:07:05 · 301 阅读 · 0 评论