Java数据结构和算法大师班
数据结构和算法从零到英雄和顶级公司 100+ 面试问题(Java 编码)
讲师:Elshad Karimov
口袋资源独家Udemy付费课程,独家中英文字幕,配套资料齐全!
用不到1/10的价格,即可享受同样的高品质课程,且可以完全拥有,随时随地都可以任意观看和分享。
你将会学到的
- 学习、实施和使用不同的数据结构
- 学习、实施和使用不同的算法
- 通过掌握计算机科学基础知识成为更好的开发人员
- 了解通过困难的编码面试所需的一切
- 通过 100 多个带解释的问题破解编程面试
- 数据结构和算法的时空复杂度
- 递归
- 大O
- 动态规划
- 分而治之算法
- 图算法
- 贪心算法
要求
- 基本的 Java 编程技能
说明
欢迎来到 Java 数据结构和算法大师班, 这是互联网上最现代、最完整的 Java 数据结构和算法课程。
这是最全面的在线课程,时长超过45 小时,可帮助您在编码面试中脱颖而出,并了解 Java 中的数据结构和算法。您将看到在苹果、亚马逊、谷歌和微软等顶级科技公司完成的100 多个面试问题,以及如何面对面试,全面的视觉解释视频资料,让您离梦想的科技工作更近一步!
学习 Java 是改善职业前景的最快方法之一,因为它是最需要的技术技能之一!本课程将帮助您更好地理解 数据结构的每个细节以及如何用高级编程语言实现算法。
我们将通过引人入胜的视频教程逐步指导您,并教您成为专业程序员所需的一切。
完成本课程后,您将能够:
学习基本的算法技术,例如贪心算法、二分搜索、排序和动态规划,以解决编程挑战。
了解各种数据结构的优点和缺点,以便您可以为您的数据和应用程序选择最佳数据结构
了解许多常用的数据排序算法,以便您的应用程序在对大型数据集进行排序时高效执行
了解如何应用图形和字符串算法来解决现实世界的挑战:在巨大的地图上寻找最短路径并从数百万个片段中组装基因组。
为什么这门课程如此特别并且不同于任何其他在线资源?
本课程将带您从入门到理解数据结构和算法的非常复杂和高级的主题!
在整个课程中,您将获得视频讲座,通过全面的视觉解释清楚地解释概念。
您还将看到在苹果、亚马逊、谷歌和微软等顶级科技公司完成的面试问题。
我涵盖了您需要了解的有关技术面试过程的所有信息!
因此,无论您是有兴趣深入学习世界顶级编程语言,还是有兴趣学习构成每个有成就的程序员/设计师或软件架构师的核心基础技能集的基本算法、数据结构和性能分析,并且很高兴在您的下一次技术面试中取胜这是适合您的课程!
这就是您今天注册所获得的:
终身访问44 小时以上的高清质量视频。没有每月订阅。随时随地按照自己的节奏学习
每当您有疑问或遇到困难时,在课程问答中提供友好而快速的支持
30 天全额退款保证!
本课程旨在帮助您实现职业目标。无论您是想深入了解数据结构和算法、增加收入潜力,还是只是想要一份更自由的工作,这门课程都适合您!
本课程涵盖的主题。
第 1 节 – 简介
- 什么是数据结构?
- 什么是算法?
- 为什么数据结构和算法很重要?
- 数据结构的类型
- 算法类型
第 2 节 – 递归
- 什么是递归?
- 为什么我们需要递归?
- 递归如何工作?
- 递归与迭代解决方案
- 何时使用/避免递归?
- 如何分三步写递归?
- 如何使用递归查找斐波那契数列?
第 3 节 – 破解递归面试问题
- 问题 1 – 数字总和
- 问题 2 – 电源
- 问题 3 – 最大公约数
- 问题 4 – 十进制转二进制
第 4 节 – 奖励挑战递归问题(练习)
- 力量
- 阶乘
- 数组的乘积
- 递归范围
- 小谎
- 撤销
- 是回文
- 一些递归的
- 展平
- 先资本化
- 嵌套偶数
- 大写单词
- 字符串化数字
- 收集字符串
第 5 节 – 大 O 符号
- 类比和时间复杂度
- 大 O、大 Theta 和大 Omega
- 时间复杂度示例
- 空间复杂度
- 删除常量和非支配项
- 添加与乘法
- 如何使用Big O测量代码?
- 如何找到递归调用的时间复杂度?
- 如何测量进行多次调用的递归算法?
第 6 部分 – 十大面试问题(亚马逊、Facebook、苹果和微软)
- 乘积和总和
- 打印对
- 打印无序对
- 打印无序对 2 数组
- 打印无序对 2 个数组 100000 个单位
- 撤销
- O(N) 等价物
- 阶乘复杂度
- 斐波那契复杂性
- 2的幂
第 7 节 – 数组
- 什么是数组?
- 数组类型
- 内存中的数组
- 创建数组
- 插入操作
- 遍历操作
- 访问数组的元素
- 在数组中搜索元素
- 从数组中删除一个元素
- 一维数组的时间和空间复杂度
- 一维数组练习
- 创建二维数组
- 插入 – 二维数组
- 访问二维数组的元素
- 遍历——二维数组
- 在二维数组中搜索元素
- 删除 – 二维数组
- 二维数组的时空复杂度
- 何时使用/避免数组
第 8 节 – 破解数组面试问题(Amazon、Facebook、Apple 和 Microsoft)
- 问题 1 – 缺失号码
- 问题 2 – 对
- 问题 3 – 在数组中查找数字
- 问题 4 – 两个整数的最大乘积
- 问题 5 – 是独一无二的
- 问题 6 – 排列
- 问题 7 – 旋转矩阵
第 9 节 – 具有挑战性的数组问题(练习)
- 中间函数
- 二维列表
- 最佳得分
- 遗漏号码
- 重复号码
- 对
第 10 节 – 链表
- 什么是链表?
- 链表与数组
- 链表的类型
- 内存中的链表
- 创建单链表
- 在内存中插入单链表
- 单向链表算法中的插入
- 单向链表中的插入方法
- 单向链表的遍历
- 在单链表中搜索值
- 从单链表中删除节点
- 单向链表中的删除方法
- 删除整个单链表
- 单链表的时空复杂度
第 11 节 – 循环单链表
- 创建循环单链表
- 插入循环单链表
- 循环单链表中的插入算法
- 循环单链表中的插入方法
- 循环单链表的遍历
- 在循环单链表中搜索节点
- 从循环单链表中删除节点
- 循环单链表的删除算法
- 循环单链表中的方法
- 删除整个循环单链表
- 循环单链表的时空复杂度
第 12 节 – 双向链表
- 双向链表的创建
- 在双向链表中插入
- 双向链表中的插入算法
- 双向链表中的插入方法
- 双向链表的遍历
- 双向链表的反向遍历
- 在双向链表中搜索节点
- 删除双向链表中的节点
- 双向链表中的删除算法
- 双向链表中的删除方法
- 删除整个双向链表
- 双向链表的时空复杂度
第 13 节 – 循环双向链表
- 创建循环双向链表
- 插入循环双向链表
- 循环双向链表中的插入算法
- 循环双向链表中的插入方法
- 循环双向链表的遍历
- 循环双向链表的反向遍历
- 在循环双向链表中搜索节点
- 从循环双向链表中删除节点
- 循环双向链表中的删除算法
- 循环双向链表中的删除方法
- 整个循环双向链表
- 循环双向链表的时空复杂度
- 链表与数组的时间复杂度
第 14 节 – 破解链表面试问题(Amazon、Facebook、Apple 和 Microsoft)
- 链表类
- 问题 1 – 删除重复项
- 问题 2 – 将第 K 返回到最后
- 问题 3 – 分区
- 问题 4 – 求和链表
- 问题 5 – 交叉路口
第 15 节 – 堆栈
- 什么是堆栈?
- Stack 是什么以及为什么?
- 堆栈操作
- 使用数组与链表进行堆栈
- 使用数组的堆栈操作(Create、isEmpty、isFull)
- 使用数组的堆栈操作(Push、Pop、Peek、Delete)
- 使用数组的堆栈的时间和空间复杂度
- 使用链表的堆栈操作
- 堆栈方法 – Push、Pop、Peek、Delete 和 isEmpty 使用链表
- 使用链表的堆栈的时间和空间复杂度
- 何时使用/避免堆栈
- 堆栈测验
第 16 节 – 队列
- 什么是队列?
- 使用数组的线性队列操作
- 使用线性队列数组创建、isFull、isEmpty 和 enQueue 方法
- 使用线性队列数组的出队、查看和删除方法
- 使用数组的线性队列的时空复杂度
- 为什么要循环队列?
- 使用数组的循环队列操作
- 使用数组在循环队列中创建、入队、isFull 和 isEmpty 方法
- 使用数组的循环队列中的出队、查看和删除方法
- 使用数组的循环队列的时空复杂度
- 使用链表的队列操作
- 使用链表在队列中创建、入队和 isEmpty 方法
- 使用链表在队列中出列、查看和删除方法
- 使用链表的队列的时间和空间复杂度
- 数组与链表实现
- 何时使用/避免排队?
第 17 节 – 破解堆栈和队列面试问题(亚马逊、Facebook、苹果、微软)
- 问题 1 – 三合一
- 问题 2 – 堆栈最小值
- 问题 3 – 一堆盘子
- 问题 4 – 通过堆栈排队
- 问题 5 – 动物收容所
第 18 节 – 树/二叉树
- 什么是树?
- 为什么树?
- 树术语
- 如何在 Java 中创建一个基本的树?
- 二叉树
- 二叉树的类型
- 二叉树表示
- 创建二叉树(链表)
- 前序遍历二叉树(链表)
- 中序遍历二叉树(链表)
- 后序遍历二叉树(链表)
- LevelOrder遍历二叉树(链表)
- 在二叉树(链表)中搜索节点
- 在二叉树(链表)中插入一个节点
- 从二叉树(链表)中删除一个节点
- 删除整个二叉树(链表)
- 创建二叉树(数组)
- 插入一个值二叉树(数组)
- 在二叉树(数组)中搜索节点
- 前序遍历二叉树(数组)
- 中序遍历二叉树(数组)
- 后序遍历二叉树(数组)
- 层序遍历二叉树(数组)
- 从二叉树(数组)中删除一个节点
- 整个二叉树(数组)
- 链表与 Python 列表二叉树
第 19 节 – 二叉搜索树
- 什么是二叉搜索树?我们为什么需要它?
- 创建二叉搜索树
- 向 BST 中插入一个节点
- 遍历二叉树
- 在 BST 中搜索
- 从 BST 中删除一个节点
- 删除整个 BST
- BST的时间和空间复杂度
第 20 节 – AVL 树
- 什么是 AVL 树?
- 为什么选择 AVL 树?
- AVL 树的常见操作
- 在AVL(Left Left Condition)中插入一个节点
- 在AVL(左右条件)中插入一个节点
- 在 AVL(右右条件)中插入一个节点
- 在 AVL(右左条件)中插入一个节点
- 在AVL中插入一个节点(全部一起)
- AVL中插入节点(方法)
- 从 AVL (LL, LR, RR, RL) 中删除一个节点
- 从 AVL 中删除一个节点(全部一起)
- 从 AVL 中删除一个节点(方法)
- 删除整个 AVL
- AVL树的时空复杂度
第 21 节 – 二进制堆
- 什么是二叉堆?我们为什么需要它?
- 二叉堆的常用操作(Creation、Peek、sizeofheap)
- 在二叉堆中插入一个节点
- 从二叉堆中提取一个节点
- 删除整个二叉堆
- 二叉堆的时间和空间复杂度
第 22 节 – 特里树
- 什么是特里树?我们为什么需要它?
- Trie 树的常用操作(创建)
- 在 Trie 中插入一个字符串
- 在 Trie 中搜索字符串
- 从 Trie 中删除一个字符串
- Trie 树的实际使用
第 23 节 – 散列
- 什么是哈希?我们为什么需要它?
- 哈希术语
- 哈希函数
- 冲突解决技术的类型
- 哈希表已满
- 分辨率技术的优点和缺点
- 哈希的实际使用
- 哈希与其他数据结构
第 24 节 – 排序算法
- 什么是排序?
- 排序类型
- 排序术语
- 冒泡排序
- 选择排序
- 插入排序
- 桶排序
- 合并排序
- 快速排序
- 堆排序
- 排序算法的比较
第 25 节 – 搜索算法
- 搜索算法简介
- 线性搜索
- Python 中的线性搜索
- 二进制搜索
- Python 中的二进制搜索
- 二分查找的时间复杂度
第 26 节 – 图算法
- 什么是图表?为什么图形?
- 图术语
- 图的类型
- 图形表示
- 使用邻接矩阵在 Java 中绘制图形
- 使用邻接列表在 Java 中绘制图形
第 27 节 – 图遍历
- 广度优先搜索算法 (BFS)
- Java 中的广度优先搜索算法 (BFS) – 邻接矩阵
- Java 中的广度优先搜索算法 (BFS) – 邻接表
- 广度优先搜索 (BFS) 算法的时间复杂度
- 深度优先搜索 (DFS) 算法
- Java 中的深度优先搜索 (DFS) 算法 – 邻接表
- Java 中的深度优先搜索 (DFS) 算法 – 邻接矩阵
- 深度优先搜索 (DFS) 算法的时间复杂度
- BFS 遍历 vs DFS 遍历
第 28 节 – 拓扑排序
- 什么是拓扑排序?
- 拓扑排序算法
- 使用邻接表的拓扑排序
- 使用邻接矩阵的拓扑排序
- 拓扑排序的时空复杂度
第 29 节 – 单源最短路径问题
- S什么是单源最短路径问题?
- 单源最短路径问题 (SSSSP) 的广度优先搜索 (BFS)
- 使用邻接列表在 Java 中用于 SSSPP 的 BFS
- 使用邻接矩阵在 Java 中用于 SSSPP 的 BFS
- SSSPP 的 BFS 的时空复杂度
- 为什么 BFS 不适用于加权图?
- 为什么 DFS 不适用于 SSSP?
第 30 节 – Dijkstra 算法
- SSSPP 的 Dijkstra 算法
- Java 中的 Dijkstra 算法 – 1
- Java 中的 Dijkstra 算法 – 2
- 带负循环的 Dijkstra 算法
第 31 节 – 贝尔曼福特算法
- 贝尔曼福特算法
- 带负循环的 Bellman Ford 算法
- 为什么 Bellman Ford 跑 V-1 次?
- Python 中的 Bellman Ford
- BFS vs Dijkstra vs Bellman Ford
第 32 节 – 所有对最短路径问题
- 所有对最短路径问题
- 试运行所有对最短路径
第 33 节 – Floyd Warshall
- 弗洛伊德沃歇尔算法
- 为什么是弗洛伊德·沃肖尔?
- Floyd Warshall 负循环,
- Java 中的 Floyd Warshall,
- BFS vs Dijkstra vs Bellman Ford vs Floyd Warshall,
第 34 节 – 最小生成树
- 最小生成树,
- 不相交集,
- Java 中的不相交集,
第 35 节 – Kruskal 和 Prim 的算法
- 克鲁斯卡尔算法,
- Python 中的 Kruskal 算法,
- 普里姆算法,
- Python 中的 Prim 算法,
- 普里姆 vs 克鲁斯卡尔
第 36 节 – 破解图和树面试问题(亚马逊、Facebook、苹果、微软)
第 37 节 – 贪心算法
- 什么是贪心算法?
- 众所周知的贪心算法
- 活动选择问题
- Python 中的活动选择问题
- 硬币找零问题
- Python中的硬币找零问题
- 分数背包问题
- Python 中的分数背包问题
第 38 节 – 分而治之算法
- 什么是分而治之算法?
- 常见的分而治之算法
- 如何使用分而治之的方法解决斐波那契数列?
- 数因子
- Java 中的数字因子
- 房子强盗
- Java 中的盗屋问题
- 将一个字符串转换为另一个
- 在 Java 中将一个字符串转换为另一个字符串
- 零一背包问题
- Java中的零一个背包问题
- 最长公共序列问题
- Java 中的最长公共子序列
- 最长回文序列问题
- Java 中最长的回文子序列
- 到达最后一个单元格问题的最小成本
- 使用 Java 到达二维数组中最后一个单元格的最低成本
- 以给定成本到达最后一个单元格的方法数
- 在 Java 中以给定的成本到达最后一个单元格的方法数
第 39 节 – 动态规划
- 什么是动态规划?(重叠属性)
- DC的名字从何而来?
- 自上而下的记忆
- 自下而上的制表
- 自上而下与自下而上
- 归并排序是动态规划吗?
- 使用动态规划的数因数问题
- 数字因子:自上而下和自下而上
- 使用动态规划的房屋强盗问题
- 房屋大盗:自上而下和自下而上
- 使用动态规划将一个字符串转换为另一个字符串
- 使用自下而上转换字符串
- 使用动态规划的零一个背包
- 零一背包 – 自上而下
- 零一背包 – 自下而上
第 40 节 – 挑战动态规划问题
- 最长重复序列长度问题
- 最长公共子序列长度问题
- 最长公共子序列问题
- 差异实用程序
- 最短公共子序列问题
- 最长回文序列的长度
- 子集和问题
- 鸡蛋掉落拼图
- 最大长度链对
第 41 节 – 解决问题的秘诀
- 介绍
- 第 1 步 – 了解问题
- 第 2 步 – 示例
- 第 3 步 – 分解
- 第 4 步 – 解决或简化
- 第 5 步 – 回顾和重构
第 41 节 – 狂野西部
此课程面向哪些人:
- 任何有兴趣了解更多关于数据结构和算法或技术面试过程的人!
- 有Java基础知识,想成为数据结构和算法专业的自学程序员,开始面试技术职位!
- 目前正在学习计算机科学的学生想要数据结构和算法的补充材料以及毕业后的面试准备!
- 需要为即将到来的编码面试练习的专业程序员。