
数据结构与算法
文章平均质量分 92
数据结构与算法
夏安
这个作者很懒,什么都没留下…
展开
-
《剑指 Offer (第 2 版)》动态规划部分 JavaScript 题解
《剑指 Offer(第 2 版)》通行全球的程序员经典面试秘籍。剖析典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这 5 个面试要点。最近,把**动态规划**部分的题刷完了。本文来分享下这些题的解法...原创 2022-08-04 20:06:56 · 289 阅读 · 0 评论 -
动态规划解决股票问题(下)
给定一个整数数组,其中第 表示第 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:示例 2:力扣链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown我们用 表示第 天结束之后的「累计最大收益」。根据题目描述,由于我们最多只能同时买入(持有)一支股票原创 2022-06-25 22:55:47 · 245 阅读 · 0 评论 -
动态规划解决股票问题(上)
给定一个数组 ,它的第 个元素 表示一支给定股票第 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:示例 2:力扣链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock思路:总目标是找出两个数,使得其差值最大,并且小的在左边2. 买卖股票的最佳时机 II题目原创 2022-06-24 23:23:43 · 289 阅读 · 0 评论 -
动态规划解决打家劫舍问题
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 **不触动警报装置的情况下 **,一夜之内能够偷窃到的最高金额。示例 1:示例 2:力扣链接:https://leetcode.cn/problems/house-robber首先考虑最简单的情况。如果只有一间房屋,则偷窃该房屋,可以偷窃到最高总金额。如果只有两间房屋,原创 2022-06-20 14:42:10 · 1325 阅读 · 1 评论 -
回溯算法解决 N 皇后问题
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n 皇后问题 研究的是如何将 个皇后放置在 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 和 分别代表了皇后和空位。示例 1:示例 2:1.3 思路皇后的走法是:可以横直斜走,格数不限。因此要求皇后彼此之间不能相互攻击,等价于要求任何两个皇后都不能在同一行、同一列以及同一条斜线上。直观的做法是暴力枚举原创 2022-06-01 12:24:11 · 745 阅读 · 0 评论 -
回溯算法将排列问题一网打尽
回溯算法将排列问题一网打尽1. 全排列1.1 问题描述给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。1.2 要求示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]1.3 思路以数组 [1, 2, 3]原创 2022-05-30 14:58:35 · 214 阅读 · 0 评论 -
回溯算法将组合问题一网打尽
回溯算法将组合问题一网打尽1. 组合1.1 问题描述给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。1.2 要求示例 1:输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]1.3 思路既然是树形问题上的 深度优先遍历,因此首先画出树形结构。例如输入:n = 4,原创 2022-05-29 22:10:57 · 1087 阅读 · 0 评论 -
《剑指 Offer (第 2 版)》数组部分 JavaScript 题解
《剑指 Offer (第 2 版)》数组部分 JavaScript 题解《剑指 Offer (第 2 版)》数组部分 JavaScript 题解03. 数组中重复的数字04. 二维数组中的查找07. 重建二叉树11. 旋转数组的最小数字12. 矩阵中的路径17. 打印从1到最大的n位数21. 调整数组顺序使奇数位于偶数前面29. 顺时针打印矩阵31. 栈的压入、弹出序列39. 数组中出现次数超过一半的数字40. 最小的k个数42. 连续子数组的最大和47. 礼物的最大价值《剑指 Offer (第 2 版)原创 2022-03-09 19:07:40 · 892 阅读 · 0 评论 -
《剑指 Offer (第 2 版)》队列部分 JavaScript 题解
《剑指 Offer (第 2 版)》队列部分 JavaScript 题解《剑指 Offer (第 2 版)》队列部分 JavaScript 题解09. 用两个栈实现队列50. 第一个只出现一次的字符9 - I. 滑动窗口的最大值59 - II. 队列的最大值《剑指 Offer (第 2 版)》队列部分 JavaScript 题解《剑指 Offer(第 2 版)》通行全球的程序员经典面试秘籍。剖析典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这 5 个面试要点。最近,把队列部原创 2022-03-02 11:10:38 · 120 阅读 · 0 评论 -
《剑指 Offer (第 2 版)》树部分 JavaScript 题解
剑指 Offer (第 2 版)》树部分 JavaScript 题解剑指 Offer (第 2 版)》树部分 JavaScript 题解07. 重建二叉树26. 树的子结构27. 二叉树的镜像28. 对称的二叉树32 - II. 从上到下打印二叉树 II32 - III. 从上到下打印二叉树 III33. 二叉搜索树的后序遍历序列34. 二叉树中和为某一值的路径36. 二叉搜索树与双向链表54. 二叉搜索树的第k大节点55 - I. 二叉树的深度55 - II. 平衡二叉树68 - I. 二叉搜索树的最近公原创 2022-03-01 14:47:55 · 598 阅读 · 0 评论 -
《剑指 Offer (第 2 版)》栈部分 JavaScript 题解
《剑指 Offer (第 2 版)》栈部分 JavaScript 题解《剑指 Offer (第 2 版)》栈部分 JavaScript 题解06. 从尾到头打印链表09. 用两个栈实现队列30. 包含min函数的栈31. 栈的压入、弹出序列33. 二叉搜索树的后序遍历序列36. 二叉搜索树与双向链表《剑指 Offer (第 2 版)》栈部分 JavaScript 题解《剑指 Offer(第 2 版)》通行全球的程序员经典面试秘籍。剖析典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合原创 2022-02-26 12:34:49 · 202 阅读 · 0 评论 -
《剑指 Offer (第 2 版)》链表部分 JavaScript 题解
《剑指 Offer (第 2 版)》链表部分 JavaScript 题解《剑指 Offer (第 2 版)》链表部分 JavaScript 题解06. 从尾到头打印链表18. 删除链表的节点22. 链表中倒数第k个节点24. 反转链表25. 合并两个排序的链表35. 复杂链表的复制36. 二叉搜索树与双向链表52. 两个链表的第一个公共节点《剑指 Offer (第 2 版)》链表部分 JavaScript 题解《剑指 Offer(第 2 版)》通行全球的程序员经典面试秘籍。剖析典型的编程面试题,系统整理原创 2022-02-25 15:48:12 · 193 阅读 · 0 评论 -
「数据结构与算法Javascript描述」十大排序算法
「数据结构与算法Javascript描述」十大排序算法「数据结构与算法Javascript描述」十大排序算法1. 冒泡排序2. 选择排序3. 插入排序4. 归并排序5. 快速排序6. 希尔排序7. 堆排序8. 计数排序9. 桶排序10. 基数排序「数据结构与算法Javascript描述」十大排序算法所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算原创 2022-02-10 12:21:31 · 809 阅读 · 0 评论 -
「数据结构与算法Javascript描述」二叉树
「数据结构与算法Javascript描述」二叉树「数据结构与算法Javascript描述」二叉树1. 树的定义2. 二叉树2.1 二叉搜索树2.2 二叉搜索树的遍历2.3 二叉搜索树上进行查找2.3.1 查找最小值和最大值2.3.2 查找给定值2.4 二叉搜索树上删除节点2.5 更多二叉树「数据结构与算法Javascript描述」二叉树树是计算机科学中经常用到的一种数据结构。树是一种非线性的数据结构,以分层的方式存储数据。树被用来存储具有层级关系的数据,比如文件系统中的文件;树还被用来存储有序列表。本章原创 2022-01-29 12:13:12 · 1994 阅读 · 0 评论 -
「数据结构与算法Javascript描述」队列
「数据结构与算法Javascript描述」队列「数据结构与算法Javascript描述」队列1. 对队列的操作2. 队列的实现3. 优先队列「数据结构与算法Javascript描述」队列队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存储按顺序排列的数据,先进先出,这点和栈不一样,在栈中,最后入栈的元素反而被优先处理。可以将队列想象成在银行前排队的人群,排在最前面的人第一个办理业务,新来的人只能在后面排队,直到轮到他们为止。队列是一种先进先出(First-In-First-Ou原创 2022-01-26 13:32:20 · 101 阅读 · 0 评论 -
「数据结构与算法Javascript描述」栈
「数据结构与算法Javascript描述」栈「数据结构与算法Javascript描述」栈1. 对栈的操作2. 栈的实现3. 使用Stack类3.1 数制间的相互转换3.2 回文3.3 递归演示「数据结构与算法Javascript描述」栈1. 对栈的操作栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。咖啡厅内的一摞盘子是现实世界中常见的栈的例子。只能从最上面取盘子,盘子洗净后,也只能摞在这一摞盘子的最上面。栈被称为一种后入先出(LIFO,last-in-fifirst-out)的数原创 2022-01-26 12:57:32 · 150 阅读 · 0 评论 -
「数据结构与算法Javascript描述」链表
「数据结构与算法Javascript描述」链表「数据结构与算法Javascript描述」链表1. 为什么需要链表2. 链表的定义3. 设计一个基于对象的链表3.1 Node 类3.2 LinkedList类3.3 插入新的节点3.4 从链表中删除一个节点4. 双向链表5. 循环链表「数据结构与算法Javascript描述」链表1. 为什么需要链表在很多编程语言中,数组的长度是固定 的,所以当数组已被数据填满时,再要加入新的元素就会非常困难。在数组中,添加和删除元素也很麻烦,因为需要将数组中的其他元素向原创 2022-01-26 10:48:42 · 1189 阅读 · 0 评论 -
深度优先与广度优先搜索求解迷宫寻路
深度优先与广度优先搜索求解迷宫寻路标题算法比较第一种方法:广度优先搜索(BFS)。优点: 找出的第一条路径就是最短路径。缺点: 需要记录结点的前驱结点,来形成路径。第二种方法:深度优先搜索(DFS)加回溯。优点: 无需像广度优先搜索那样(BFS)记录前驱结点。缺点: 找到的第一条可行路径不一定是最短路径,如果需要找到最短路径,那么需要找出所有可行路径后,再逐一比较,求出最短路径。广...原创 2020-04-10 15:49:00 · 1904 阅读 · 0 评论 -
7-7 后缀式求值 (25分)的python实现
exp=input().split()ls=list()def Cal(a,b,i): if i=="+": return a+b elif i=="-": return a-b elif i=="*": return a*b else: return a/bfor i in exp: if i in "+-*/": a=ls.pop() b=ls.p...原创 2020-04-05 10:17:25 · 965 阅读 · 0 评论 -
链栈以及中缀表达式转后缀表达式并求值的链栈实现
表达式包括浮点数求值的链栈实现链栈一般链栈一般链栈的创建进栈出栈多链栈栈的应用:表达式求值中缀表达式转后缀表达式后缀表达式求值完整代码链栈为了便于操作,采用带头结点的单链表实现栈,把链表的头指针作为栈顶指针。采用链栈不必预先估计栈的最大容量,只要系统有可用的空间,链栈就不会出现溢出的情况。对于链栈,使用完毕后,应该释放其空间。链栈的各种基本操作的实现与单链表的操作类似。链栈分为一般链栈和...原创 2020-04-03 20:49:16 · 1756 阅读 · 0 评论