![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 67
数据结构与算法 笔记
海燕技术栈
既然巅峰留不住,那就重走来时路
展开
-
对话AI之POSTGRESQL的数据结构
简单说一下POSTGRESQL里面的数据结构。原创 2023-04-01 01:18:12 · 805 阅读 · 0 评论 -
343-整数拆分
https://leetcode-cn.com/problems/integer-break/给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。**输入: **n = 2 **输出: **1 **解释: **2 = 1 + 1, 1 × 1 = 1。**输入: **n = 10 **输出: **36 **解释: **10 = 3 + 3 + 4, 3 × 3 × 4 = 36。要求2 &原创 2022-05-07 09:13:57 · 143 阅读 · 0 评论 -
322-零钱兑换
https://leetcode-cn.com/problems/coin-change/给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。**输入:**coins = [1, 2, 5], amount = 11 **输出:**3 **解释:**11 = 5 + 5 + 1**输入:**coins = [2原创 2022-05-07 09:13:20 · 154 阅读 · 0 评论 -
309-最佳买卖股票时机含冷冻期
https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前原创 2022-05-06 22:18:40 · 280 阅读 · 0 评论 -
279-完全平方数
https://leetcode-cn.com/problems/perfect-squares/给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。**输入:**n = 12 **输出:**3 **解释:**12 = 4 + 4 + 4**输入:**n = 13 **输出:**2 **解释:**13 = 4 + 9要求1 <原创 2022-05-06 22:17:52 · 335 阅读 · 0 评论 -
最长递增子序列
https://leetcode-cn.com/problems/longest-increasing-subsequence/给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。**输入:**nums = [10,9,2,5,3,7,101,18] **输出:**4 **解释:**最长递增子序列是 [2,3,7,101]原创 2022-05-06 15:03:14 · 167 阅读 · 0 评论 -
丑数 II
https://leetcode-cn.com/problems/ugly-number-ii/给你一个整数 n ,请你找出并返回第 n 个 丑数 。**丑数 **就是只包含质因数 2、3 和/或 5 的正整数。**输入:**n = 10 **输出:**12 解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。**输入:**n = 1 **输出:**1 **解释:**1 通常被视为丑数。条件1 <= n <= 1690这道题首原创 2022-05-05 22:35:53 · 128 阅读 · 0 评论 -
重学GoLang之通过刷LeetCode简单题来学习Go语言基础语法
两数之和题目要求:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。func twoSum(nums []int, target int) []int { var a int = len(nums) var i int = 0 var ans = []int{} for i < a { var j = 0 for j < i { //原创 2022-04-25 22:24:26 · 266 阅读 · 0 评论 -
动态规划之完全背包和多重背包
完全背包描述: 有 N 种物品和一个容量为 V 的背包,每种物品都有无限件可用。第 i 种物 品的费用是 c[i],价值是 w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且 价值总和最大。 分析:完全背包和01背包的区别就是物品的数量,01背包的结果对于一个物品来说是要么有0个要么有1个(所以称之为01背包),而完全背包,不仅需要考虑有没有,还需要考虑有多少个。只需要对01背包的代码进行简单改造,就可以解决这样的问题。每个物品有无限个import java.util..原创 2022-01-25 11:28:14 · 1109 阅读 · 0 评论 -
动态规划之用Java实现01背包
背包问题有很多种,是最简单的动态规划类型。01背包描述: 有 N 件物品和一个容量为 V 的背包。(每种物品均只有一件)第 i 件物品 的费用是 c[i],价值是 w[i]。求解将哪些物品装入背包可使价值总和最大。解析:N件物品可以看做是有N种备选方案,容量为V的背包可以看做是成本为V,c[i]是每种方案的成本,价值是每种方案带来的效益。那么问题就变成了,在不超过总成本V的情况下,使用哪些备选方案,可以使效益最大。不过,这里针对的是单一物品特性,如果一个复杂系统是多个组成部分,每个部分有多种不同原创 2022-01-24 22:36:20 · 416 阅读 · 0 评论 -
用Java实现线段树
线段树是为区间更新和区间查询而生的数据结构,旨在快速解决区间问题。一般来说,线段树是不会加节点的,也不支持动态添加节点。线段树也是二叉树的一种,不过它的节点是以一个区间来定义节点的。具有一个单一区间的就是叶子节点。所以线段树,本质上就是一棵区间树。我们在查找的时候,只需要找出结果区间由哪些子区间构成即可。实现代码首先定义出基础的结构public class SegmentTree { private Integer value; private Integer ma原创 2022-01-21 21:30:08 · 1242 阅读 · 0 评论 -
用Java实现二叉堆、大顶堆和小顶堆
先了解了解什么是二叉堆二叉堆就是完全二叉树,或者是靠近完全二叉树结构的二叉树。在二叉树建树时采取前序建树就是建立的完全二叉树。也就是二叉堆。所以二叉堆的建堆过程理论上讲和前序建树一样。什么是大顶堆、小顶堆二叉堆本质上是一棵近完全的二叉树,那么大顶堆和小顶堆必然也是满足这个结构要求的。在此之上,大顶堆要求对于一个节点来说,它的左右节点都比它小;小顶堆要求对于一个节点来说,它的左右节点都比它大。建堆二叉堆建堆本质上和前序建堆差不多,只不过需要考虑的一点就是大小关系,这一点和二叉搜索树建树有.原创 2022-01-21 21:27:13 · 1348 阅读 · 0 评论 -
不会写并查集?看看这篇用Java实现并查集
并查集就是将原本不在一个集合里面的内容合并到一个集合中。在实际的场景中用处不多。除了出现在你需要同时去几个集合里面查询,避免出现查询很多次,从而放在一起查询的情况。下面简单实现一个例子,我们来举例说明一下什么是并查集,以及究竟并查集解决了什么问题。代码解析package com.chaojilaji.book.andcheck;public class AndCheckSet { public static Integer getFather(int[] father, in原创 2022-01-21 21:21:22 · 769 阅读 · 0 评论 -
二叉树的实现和遍历
什么是二叉树简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。由于很多排序算法都是基于二叉树实现的,多叉树也是二叉树延伸过去的,所以二叉树的建树和遍历就显得非常重要。二叉树建树一般情况是给你一个串,要求让你以前序,中序,后序的方式建树。那么此时我们就需要首先了解三个概念:前序遍历中序遍历后序遍历我们来看看一棵二叉树的结构: .原创 2022-01-21 20:48:22 · 608 阅读 · 0 评论 -
不会写平衡二叉树?看这一篇就够了
什么是二叉搜索树简单来说,就是方便搜索的二叉树,是一种具备特定结构的二叉树,即,对于节点n,其左子树的所有节点的值都小于等于其值,其右子树的所有节点的值都大于等于其值。以序列2,4,1,3,5,10,9,8为例,如果以二叉搜索树建树的方式,我们建立出来的逐个步骤应该为第一步:第二步:第三步:第四步:第五步:第六步:第七步:第八步:按照不平衡的普通方法生成的二叉搜索树就是这么一个样子。其实现代码如下:package com.chaojilaji.book.searcht.原创 2022-01-21 20:14:58 · 570 阅读 · 0 评论 -
深度优先入门?先看看迷宫问题吧
什么是深度优先什么是深度,即向下,深度优先,即向下优先,一口气走到底,走到底发现没路再往回走。在算法实现上来讲,深度优先可以考虑是递归的代名词,深度优先搜索必然需要使用到递归的思路。有的人可能会说了,我可以用栈来实现,以迭代的方式,那么问题来了,栈这种数据结构,同学们认为是否也囊括了递归呢?Java语言的方法区本身也是实现在一个栈空间上的。一个简单的例子我们以一个简单的迷宫为例,以1代表墙,0代表路径,我们构造一个具有出入口的迷宫。1 1 0 1 1 1 1 1 11 0 .原创 2022-01-21 19:46:23 · 301 阅读 · 0 评论 -
还不会写广度优先算法?看看这一篇吧
什么是广度优先广度就是扩展开,广度优先的意思就是尽量扩展开。所以在算法实现的时候,就是一个循环遍历枚举每一个邻接点。其基本思路就是按层扩展,扩得越广越好。伪代码如下:for(int i = 0; i < children.size(); i++){ children.get(i); // 调用每一个子节点}一个简单的例子我们以一个简单的迷宫为例,以1代表墙,0代表路径,我们构造一个具有出入口的迷宫。1 1 0 1 1 1 1 1 11 0 0 0 .原创 2022-01-20 23:20:53 · 403 阅读 · 0 评论 -
你知道多少排序算法?
你知道有哪些排序算法?还记得是怎么实现的吗?今天炒鸡辣鸡就和大家回忆一下有哪些排序算法。冒泡排序原理:相邻的2个数进行比较。每次经过一趟比较,最大数或者最小数就会被交换到最后一位。时间复杂度:如果是按照从小到大的顺序进行排序,只需要把前n-1个大的数归为到后面的n-1位即可,所以外层循环只需要到len-1。冒泡排序的最坏情况就是把顺序变为逆序,把逆序变为顺序。时间复杂度O(n^2)选择排序...原创 2020-04-08 21:46:03 · 459 阅读 · 0 评论