算法基础
文章平均质量分 76
主要是leetcode算法解答
alstonlou
这个作者很懒,什么都没留下…
展开
-
算法第四十一天-排除排序链表中的重复元素Ⅱ
递归函数直接使用题目给出的函数。原创 2024-04-10 21:00:08 · 460 阅读 · 0 评论 -
算法四十天-删除排序链表中的重复元素
一次遍历由于给定的链表是排好序的,因此,因此我们只需要对链表进行一次遍历,就可以删除重复的元素。具体地,我们从指针cur指向链表的头节点,随后开始对链表进行遍历。如果,可以直接将cur后移一位,移除值相同的链表。当遍历完整这个链表时,返回链表的头节点就可以了。原创 2024-04-09 22:11:04 · 436 阅读 · 0 评论 -
算法第三十九天-验证二叉树的前序序列化
方法一:栈栈的思路是「自底向上」的想法。下面要结合本题是「前序遍历」这个重要特点。我们知道「前序遍历」是按照「根节点-左子树-右子树」的顺序遍历的,只有当根节点的所有左子树遍历完成之后,才会遍历右子树。对于本题的输入,我们可以先判断「左子树」是否有效的,然后再判断「右子树」是否有效的,最后判断「根节点-左子树-右子树」是否为有效的。这个思路类似于递归,而把递归改写成循环时,就会使用「栈」,这就是本题使用「栈」的原因。下面的重点是如何判断一棵子树是否有效?原创 2024-04-07 21:27:13 · 942 阅读 · 0 评论 -
算法第三十八天-故障键盘
提示:把反转看成是往字符串的头部添加字符。具体来说:如果当前处于「往字符串尾部添加字符」的状态,那么遇到 i 后,改成「往字符串头部添加字符」的状态。如果当前处于「往字符串头部添加字符」的状态,那么遇到 i 后,改成「往字符串尾部添加字符」的状态。这可以用双端队列实现。原创 2024-04-02 20:27:40 · 367 阅读 · 0 评论 -
算法第三十七天-旋转链表
题意:将链表中每个元素向后移动k个位置,相当于把链表的后面k%len节点移到链表的最前面。所以本题步骤为:1.求出链表长度;2.找出倒数第k+1个节点3.链表重整:将连败哦的倒数第k+1个节点和倒数第k个节点断开,并把后半部分拼接到链表的头部。原创 2024-04-01 20:52:24 · 374 阅读 · 0 评论 -
代码第三十六天:需要添加的硬币的最小数量
为方便描述,把 0 也算作可以得到的数。假设现在得到了区间0s−1中的所有整数,如果此时遍历到整数xcoinsi,那么把0s−1中的每个整数都增加x,我们就得到了区间xsx−1中的所有整数。思路把coins从小到大排序,遍历xcoinsi。x≤s0s−1xsx−10sx−1xscoinsssss2s−10s−102s−1x2s当stargets时,我们就得到了1。原创 2024-03-31 22:02:53 · 769 阅读 · 0 评论 -
代码第三十五天-子集Ⅱ
一般情况下,看到题目要求[所有可能的结果],而不是[结果的个数],我们就知道需要暴力搜索所有的可行解了,可以使用[回溯法]回溯法是一种算法思想,而递归式一种编程方式,回溯法可以使用递归来实现。回溯法的整体思路是:搜索每一条路,每次回溯是对具体的一条路径而言的。对当前路径下的未探索区域进行搜索,则可能出现两种情况:1.当前未搜索区域满足结束条件,则保留当前路径并退出当前搜索;原创 2024-03-30 17:19:47 · 893 阅读 · 0 评论 -
算法第三十四天-有效数独
一个简单的方法是,遍历9*93*3。原创 2024-03-28 20:59:23 · 325 阅读 · 0 评论 -
算法第三十三天-笨阶乘
对于表达式求值,大家已经很熟悉了,需要用到[栈]这个数据结构。当使用python进行答题的时候,需要注意下面的这个坑。Python语言中的整数除法是向下取整的,而不是向零取整,对于负数的除法会有问题。原创 2024-03-25 19:11:34 · 295 阅读 · 0 评论 -
算法第三十二天-最长公共子序列
比如对于本题而言,可以定义dp[i][j]表示和的最长公共子序列。之所以dp[i][j]的定义不是text1[0:i]和text2[0:j],是为了方便当i=0或者j=0的时候,dp[i][j]表示的为空字符串和另外一个字符串的匹配,这样子dp[i][j]可以初始化为0.原创 2024-03-23 16:35:56 · 550 阅读 · 0 评论 -
算法第三十一天-直方图的水量
使用面向列的计算比面向行的计算更加容易。我们只需要考虑当前的位置的左右最高模板的高度。原创 2024-03-21 19:36:24 · 1019 阅读 · 0 评论 -
算法第三十一天-区域和检索【数组不可变】
为方便描述,把nums记作a。对于数组a,定义它的前缀和s0s1s2sisi1sn0a0a0a1⋮a0a1⋯ai−1j0∑i−1numsja0a1⋯ai−1aij0∑inumsj⋮a0a1⋯an−1根据这个定义,有si1siai示例中的数组−203−52−1,对应的前缀和数组s0−2−21。原创 2024-03-20 11:04:42 · 879 阅读 · 0 评论 -
算法第三十天-矩阵中移动的最大次数
网格图 DFS从第一列的任一单元格i0开始递归。枚举往右上/右/右下三个方向走,如果走一步后,没有出界,且格子值大于gridij,则可以走,继续递归。在递归过程中,记录能访问到的最大列号,作为答案。代码实现时,为避免重复递归之前访问过的格子,可以用一个vis数组标记访问过的格子。但实际上,可以把gridij置为0从而无需创建vis数组。这是因为网格值均为正数,并且我们只能访问到比当前格子值更大的格子,所以置为0。原创 2024-03-18 19:21:41 · 1105 阅读 · 0 评论 -
算法第二十九天-最长公共子序列
比如对于本题而言,可以定义dp[i][j]表示和的最长公共子序列。之所以dp[i][j]的定义不是text1[0:i]和text2[0:j],是为了方便当i=0或者j=0的时候,dp[i][j]表示的为空字符串和另外一个字符串的匹配,这样子dp[i][j]可以初始化为0.原创 2024-03-17 21:47:30 · 809 阅读 · 0 评论 -
算法第二十九天-森林中的兔子
xx+1x我们可以通过举例子得出一下的规律:我们统计数组中所有回答x的兔子的数量nn%(x+1)==0n/(x+1)x+1n/(x+1)+1x+1。原创 2024-03-17 21:46:09 · 376 阅读 · 0 评论 -
算法第二十八天-组合总和
target =727-2=52737-3=437基于上面的想法,可以画出树形图。建议大家自己在纸上画出这棵树,。编码通过实现,使用一个列表,在变化过程中,遍历所有可能的列表并判断当前列表是否符合题目要求,完成[回溯]原创 2024-03-16 15:30:38 · 384 阅读 · 0 评论 -
算法第二十七天-猜数字游戏
有多少位属于数字和确切位置都猜对了:统计secretiguessi的个数。有多少位属于数字猜对了但是位置不对:用两个数组(哈希表)分别统计secretiguessi时secreti的出现次数和guessi的出现次数,记作cntS和cntG。答案为∑mincntSicntGi])例如secret12223guess13332对于secretiguessi。原创 2024-03-15 18:57:39 · 839 阅读 · 0 评论 -
算法第二十六天-删除有序数组中的重复项Ⅱ
题目要求中提到原地修改,那么肯定需要一个指针指向当前即将放置元素的位置,需要另外一个指针向后遍历所有元素,所以[双指针]解法呼之欲出。slow-1因为最多允许两个重复元素,并且slow-2位置是上上次放置了元素的位置,所以让num[fast]跟进行比较。每次都是只允许最多两个元素出现重复,这两个元素的位置在slow-1和slow-2。原创 2024-03-10 22:08:23 · 527 阅读 · 0 评论 -
算法第二十五天-寻找排序数组中的最小值
二分法。原创 2024-03-09 22:54:13 · 337 阅读 · 0 评论 -
深度学习-2.4建模过程总结和第一个最优化函数
深度学习的完整建模过程总结和第一个最优化函数原创 2024-03-09 22:51:39 · 1093 阅读 · 0 评论 -
深度学习-2.2 多层神经网络
从单层到多层是神经网络发展史上的重大变化,层的增加彻底将神经网络的性能提升到了另一个高度,正确理解层的意义对于我们自主构建神经网络有很重要的作用,学会利用层是避免浪费计算资源以及提升神经网络效果的关键。原创 2024-03-03 17:10:14 · 1296 阅读 · 0 评论 -
深度学习-2.1 神经网络原理
文章目录神经网络原理1.单层神经网络1.1 回归单层神经网络:线性回归1.2 二分类单层神经网络:sigmoid与阶跃函数1.3 多分类单层神经网络:softmax回归神经网络原理人工神经网络(Artificial Neural Network,ANN),通常简称为神经网络,它是机器学习当中独树一帜的,最强大的强学习器没有之一。人脑通过构建复杂的网络可以进行逻辑,语言,图像的学习,而传统机器学习算法不具备和人类相似的学习能力。机器学习研究者们相信,模拟大脑结构可以让机器的学习能力更上一层楼,于是人工神原创 2024-02-29 10:53:16 · 1600 阅读 · 0 评论 -
算法第二十三天-合并两个有序数组
直接利用Python自带的语句进行合并和排序。原创 2024-01-23 18:52:06 · 900 阅读 · 0 评论 -
算法第二十二天-最大数
今天的题目,让我们将一组数字重新组合,构成一个最大的整数。由于构成的整数非常大,所以返回结果需要字符串格式。首先**拼接成的两个字符串一定是等长的。**等长的字符串在比较的时候,是按照字符串的各个字符从前向后逐个比较的,所以相当于先比较了百分位,然后比较十分位,最后比较个位。综上,我们按照下面的步骤:1.先把nums中的所有数字转字符串,形成字符串数组nums_str;2.比较两个字符串x,y拼接结果x+y和y+x哪个更大,从而确定x和y谁排在前面,讲nums_str降序排列;原创 2024-01-22 20:56:42 · 463 阅读 · 0 评论 -
算法第二十一天-丑数
首先判断数字是不是为0或者负数,两者均不可能成为丑数;之后对n进行不断整除,直到无法除尽为止。简单判断最后的数是不是1即可。原创 2024-01-20 21:15:41 · 517 阅读 · 0 评论 -
算法第二十天-丑数Ⅱ
题目的要求是让我们生成第n个丑数。如果考虑逐个遍历自然数是否为丑数,一定会超时。这里推荐使用生成的办法。要生成第n个丑数,我们必须从第一个丑数1开始,向后逐渐的寻找。丑数只包含2,3,5三个因子,所以生成方式是在已经生成的丑数集合中乘以[2,3,5]而得到新的丑数。现在的问题是在已经生成的丑数集合中,用哪个数字乘以2?用哪个数字乘以3?用哪个数字乘以5?实现的方法是用。原创 2024-01-16 21:07:16 · 429 阅读 · 0 评论 -
算法第十九天-二叉搜索树节点最小距离
这是解决所有二叉搜索树问题的关键。要求BST的任意两个不同节点之间的最小差值,也就是相当于求BST得到的中所有相邻节点之间的最小差值。分享二叉树遍历的经验:先序、中序、后序遍历方式的区别在于把[执行操作]放在两个递归的位置。伪代码如下:1.先序遍历2.中序遍历3.后序遍历本题使用了中序遍历,所以把[执行操作]这一步改成自己想要的代码。这个方法最直观,也最不容易出错。1.先中序遍历,把结果放在数组中;然后对数组中的相邻元素求差,得到所有差值的最小值。原创 2024-01-15 19:38:41 · 380 阅读 · 0 评论 -
算法第十八天-实现Trie(前缀树)
本文是前缀入门教程前缀树,也是一种树。为了理解前缀树,我们先从二叉树说起。可以看到一个树的节点包含了三个元素:该节点本身的值,左子树的指针,右子树的指针。二叉树可视化是下面这样子的:二叉树的每个节点只有两个孩子,那如果每个节点可以有多个孩子呢?这就形成了多叉树。多叉树的子节点数目一般不是固定的,所以会用变长数组来保存所有的子节点的指针。多叉树可视化是下面这样:对于普通的多叉树,每个节点的所有子节点可能是没有任何规律的。而本题讨论的[前缀树]就是每个节点的Children有规律的多叉树。原创 2024-01-14 09:29:22 · 823 阅读 · 0 评论 -
算法第十八天-打家劫舍Ⅱ
所以,我们先从[打家劫舍Ⅰ]开始说起。原创 2024-01-14 09:25:00 · 569 阅读 · 0 评论 -
算法第十七天-构造有效字符串的最少插入数
假设答案有n个"abc"组成,那么需要插入的字符个数为3∗n−lens。xyx≥y所以,n就是x≥y的次数加1。原创 2024-01-13 09:14:03 · 953 阅读 · 0 评论 -
刷题第十六天-扰乱字符串
给定两个字符串T和S,假设T是由S变换而来的S1S2T1T2S1T1S2T2S1T2S2T1T1S1T2S2T1S2T2S1。原创 2024-01-11 20:08:53 · 905 阅读 · 0 评论 -
刷题第十五天-存在重复元素Ⅲ
主要使用滑动窗口方法,让滑动窗口代销固定为t。本题最大的难点在于。如果遍历求滑动窗口内的最大值和最小值,时间复杂度是O(K),肯定会超时。。是的,我们的目的就是快速让一组数据有序,那就寻找一个**内部是有序的数据结构呗!**下面分语言讲解一下常见的内部有序的数据结构。下面这个图是 C++ 的multiset 内部结构示意图,它是个**平衡二叉搜索树(BST)**插入元素时会自动调整二叉树,使得每个子树根节点的键值大于左子树所有节点的键值,同时保证根节点的左右子树的高度相等。原创 2024-01-10 20:43:43 · 952 阅读 · 0 评论 -
算法第十四天-删除有序数组中的重复项
双指针左指针确定不重复值,右指针遍历数组。原创 2024-01-09 20:25:42 · 506 阅读 · 0 评论 -
算法第十三天-组合总和Ⅱ
按顺序搜索,设置合理的变量,在搜索的过程中判断是否会出现重复集结果。重点理解对输入数组排序的作用和参考代码中 大剪枝和小剪枝 的意思相同点在于:相同数字列表的不同排列被视为一个结果。为了使得解集不包含重复的组合。由39题我们知道,数组candidates有序,也是过程中实现[剪枝]的前提。将数组先排序的思路来自于这个问题:去掉一个数组中重复的元素。很容易想到的方案是:先对数组排列,重复的元素一定不是排好序以后相同的连续数组区域的第1个元素。原创 2024-01-07 23:02:45 · 564 阅读 · 0 评论 -
算法第十三天-解码方法
来自【宫水三叶】原创 2024-01-07 22:58:25 · 1073 阅读 · 0 评论 -
算法第十二天-最大整除子集
这时候你可能会想枚举个数作为[整除子集]的起点,然后从前往后遍历一遍,每次都将符合[与当前子集最后一个元素成倍数]关系的数加入答案。原创 2024-01-06 22:08:06 · 1051 阅读 · 0 评论 -
算法第十二天-矩形区域不超过K的最大数值和
来自[宫水三叶]从题面来看显然是一道[二维前缀和]的题目。本题预处理前缀和的复杂度为O(m* n)搜索所有子矩阵需要枚举[矩形左上角]和[矩形右下角],复杂度是Om2∗n2,因此,如果把本题当作二维前缀和模板题来做的话,整体复杂度为Om2∗n2数据范围是102,对应的计算量是108,理论上会超时,但当我们枚举[矩形左上角](i,j)的时候,我们只需要搜索位于(i,j)的右下方的点(p,q)作为[矩形右下角],所以其实我们是取不满m2∗n2。原创 2024-01-06 22:14:38 · 1070 阅读 · 0 评论 -
算法第十一天-递增顺序搜索树
这是解决所有二叉搜索树问题的关键。要求BST的任意两个不同节点之间的最小差值,也就是相当于求BST得到的中所有相邻节点之间的最小差值。分享二叉树遍历的经验:先序、中序、后序遍历方式的区别在于把[执行操作]放在两个递归的位置。伪代码如下:1.先序遍历2.中序遍历3.后序遍历本题使用了中序遍历,所以把[执行操作]这一步改成自己想要的代码。原创 2024-01-05 21:47:22 · 956 阅读 · 0 评论 -
算法第十一天-组合总和Ⅳ
最终返回的应该是。原创 2024-01-05 21:49:01 · 1087 阅读 · 0 评论 -
算法第十天-在D天之内送达包裹的能力
假定[D天内送完所有包裹的最低运力]为ans,那么在以ans−∞ansans∞ansmaxmaxweightssumsumweightsmaxsum。原创 2024-01-04 20:11:22 · 962 阅读 · 0 评论