自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 动态规划-96.不同的二叉搜索树

递归公式,dp[3] = dp[0]*dp[2] + dp[1] * dp[1] + dp[2] * dp[0],dp[ i ] += dp[ j ] * dp[ i-1-j ]当1为根节点时,左子树为空,右子树有两个元素,数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。当3当根节点时,右子树为空,左子树两个元素,数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。定义dp[i],1~i 为节点组成的二叉搜索树有dp[i]种。

2024-01-25 08:59:09 430

原创 聚类算法之Kmeans聚类详解

它根据样本之间的相似性,将样本划分到不同的类别中;不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法有欧氏距离法。通过计算相似度(默认欧氏距离),将相似度大的样本聚集到同一个类别,K表示聚成K个类别,means表示每个类别的聚类中心点是通过簇中所有样本点的均值得到。根据分好的类别,计算每个类别的新的聚类中心点(每个点的坐标的平均值),如果得到了新的聚类中心点则停止聚类,否则继续执行第3步,直到聚类中心点不再变化。随着类别的增加,SSE 是会逐渐变小的,因为每个点都是它所在的簇中心本身。

2024-01-15 08:52:22 719

原创 python代码实现计算某一天是一周中的第几天

给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:`day`、`month` 和 `year`,分别表示日、月、年。给出的日期一定是在 `1971` 到 `2100` 年之间的有效日期。输入:day = 31, month = 8, year = 2019。输出:"Saturday"

2024-01-13 08:31:28 352

原创 集成学习之GBDT算法详解

平方损失:左子树0+右子树(-1.61-0.19)2 + (-1.40-0.19)2 + (-0.91-0.19)2 + (-0.51-0.19)2 +(-0.26-0.19)2 +(1.59-0.19)2 + (1.39-0.19)2 + (1.69-0.19)2 + (1.74-0.19)2 =15.72308。当以1.5为分割点,拟合负梯度为-1.75,-1.61,-1.4,-0.91,…,求平方误差最小,即对损失函数求导,导数为0时,函数最小。第一次预测结果为80岁,残差为100-80=20。

2024-01-12 08:47:32 1383

原创 集成学习之Adaboost算法详解

Adaptive Boosting(自适应提升)是基于Boosting思想实现的一种集成学习算法,核心思想是提高【在前一步中分类错误的样本权重】来训练一个强分类器,错误的数据会“放大”,正确的数据会“缩小”(上一轮中,分类错误的样本权重会变大,分类正确的样本权重会变小)。可选的分裂点有:1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5。分类正确的样本为:1,2,3,4,5,6,10共七个,则正确样本的变化系数为。分类错误的样本为:7,8,9共三个,则错误样本的权重变化系数为。

2024-01-11 10:13:56 1608

原创 单调栈-1944(困难)队列中可以看到的人数

更正式的,第 i 个人能看到第 j 个人的条件是 i < j 且 min(heights[i], heights[j]) > max(heights[i+1], heights[i+2], ..., heights[j-1])。,栈底的元素最大,栈顶的最小,大元素 i 进栈之前,栈中所有比他小的元素全部出栈,出栈时大元素 i 能看到的人数+1,栈内元素始终单调递增,大的在下面。先通俗的理解一下题意,每个人只能往右看,且看到的人是严格递增的,个子矮的会被个子高的挡住视线,有点像求解【

2024-01-10 08:35:34 485

原创 C++智能指针详解之weak_ptr

weak_ptr用于判断shared_ptr关联的资源是否已经被释放。

2024-01-07 08:31:20 476

原创 C++智能指针详解之shared_ptr

有时,多个对象或代码段需要同一指针的副本,unique_ptr无法复制,不能用于此类情况。std::shared_ptr是一个可复制的支持共享所有权的智能指针。当有多个shared_ptr实例引用同一资源,它们如何知道何时释放资源?这就需要【引用计数】来解决。

2024-01-06 08:35:14 529

原创 C++智能指针详解之unique_ptr

智能指针可以帮助管理动态分配的内存,是避免内存泄漏的有用技术。智能指针可用于管理在函数作用域内(或作为类的数据成员)动态分配的资源,当智能指针离开作用域或者被重置时,会自动释放所占用的资源。智能指针有多种类型。最简单的智能指针类型std::unique_ptr对资源有唯一的所有权,稍微高级点的智能指针允许共享所有权,即多个智能指针指向同一个资源,当这样的智能指针离开作用域或者被重置时,仅当它是指向该资源的最后一个智能指针时,才会释放指向的资源,标准库提供了std::shared_ptr,它支持共享所有权。

2024-01-05 16:36:44 1177

原创 Python代码实现:二叉树的前中后序遍历、层次遍历

二叉树遍历的原理在这里不再赘述,本文学习二叉树遍历的代码实现,可作为解题模板。

2024-01-04 15:42:27 570

原创 贪心-根据身高重建队列

如果按照k来从小到大排序,排完之后,会发现k的排列不符合条件,身高h也不符合条件,两个维度哪一个都没确定下来。那么按照身高h来排序呢,身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] 输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]本题有两个维度,h和k,遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。

2024-01-03 08:49:58 506

原创 C++的源代码是怎么编译成可执行文件的?

①预处理:由预编译器负责,处理include头文件,展开define宏定义,处理条件预编译指令#if#ifdef,删除注释、添加行号。最终.c文件变为.i文件;④链接:通过链接器将多个目标文件以及依赖的库文件链接起来,生成可执行文件。②编译:由编译器负责,检测语法错误。最终.i文件变为.s汇编文件;③汇编:汇编器将汇编语言转换为二进制代码,生成目标文件.o;分为4个步骤:预处理,编译,汇编,链接。

2024-01-02 15:00:38 524

原创 贪心-135(困难)分发糖果

②相邻两个孩子评分更高的孩子会获得更多的糖果。因为 rating[5]与rating[4]的比较 要利用上 rating[5]与rating[6]的比较结果,所以 要从后向前遍历。如果从前向后遍历,rating[5]与rating[4]的比较 就不能用上 rating[5]与rating[6]的比较结果了。此时局部最优:只要右边评分比左边大,右边的孩子就多一个糖果,全局最优:相邻的孩子中,评分高的右孩子获得比左边孩子更多的糖果。这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。

2023-12-28 17:55:51 412

原创 回溯-46(中等)全排列

可以看出元素1在[1,2]中已经使用过了,但是在[2,1]中还要在使用一次1,所以处理排列问题就不用使用startIndex了。(每次都要从头开始遍历,所以不能用startindex,startindex+1是从下一个继续遍历)但排列问题需要一个used数组,标记已经选择的元素。输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]],例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。

2023-12-21 14:18:43 23

原创 二分法-163(中等)寻找峰值

依次类推,如果一直没有找到峰值,就会形成nums[0]<nums[1]<nums[2]<...<nums[x]如果nums[0]<nums[1],说明nums[0]不是峰值,现在应该来判断nums[1]了;题目中假设nums[-1]是无穷小,则nums[0]>nums[-1]对nums[1]来说同样如此,首先nums[0]<nums[1]如果此时nums[0]>nums[1],则nums[0]是峰值。如果nums[1]<nums[2]则继续判断nums[2]如果nums[1]>nums[2]则找到峰值。

2023-12-18 11:22:08 22

原创 二叉搜索树-700(简单)二叉搜索树中的搜索

对于二叉搜索树可就不一样了,因为二叉搜索树的特殊性,也就是节点的有序性,可以不使用辅助栈或者队列就可以写出迭代法。​ 对于一般二叉树,递归过程中还有回溯的过程,例如走一个左方向的分支走到头了,那么要调头,在走右分支。而对于二叉搜索树,不需要回溯的过程,因为节点的有序性就帮我们确定了搜索的方向。​ 例如要搜索元素为3的节点,我们不需要搜索其他节点,也不需要做回溯,查找的路径已经规划好了。你需要在 BST 中找到节点值等于 val 的节点。这就决定了,二叉搜索树,递归遍历和迭代遍历和普通二叉树都不一样。

2023-12-11 21:33:17 27

原创 约瑟夫环-循环链表

构造循环链表,首尾相连,相当于所有人围成一个圈。得出结论:每隔两个节点,删除下一个节点。

2023-12-08 17:15:40 29

原创 二叉树-T112(简单)路径总和

层序遍历写法,层序遍历跟先序/后序遍历思路差不多,前者用队列完成,后两者用栈完成,同样需要在队列中保存遍历的节点值和头节点到当前节点的路径和,可以在队列中存放一个个元组 (node, temp),随后判断。首先是先序遍历的迭代写法,先序遍历采用栈结构完成,此时栈中不仅要记录遍历过的节点,还要记录从头节点到当前节点的路径和,当遍历到叶子节点时,该路径也就走到尽头,判断num是否等于targetSum。递归法,递归法过于优雅,能看懂,但是不一定能独立写出来,还是做的题少了,递归的思维没有建立起来。

2023-12-07 19:30:37 33

原创 C++|引用-值传递、引用传递和const引用传递

通过const引用传递,可以做到二者兼顾:即可以不生成副本(引用传递的特点),又可以不改变原始变量的值(值传递的特点)。另一种是引用传递(pass-by-reference),传递的是指向原始对象的指针,即对象的地址,因此计算机无需生成副本,在函数体内修改引用传递参数,也会改变原始实参。默认的参数传递语义是值传递(pass-by-value):函数接收其参数的副本,修改这些参数后,原始实参将保持不变。C++程序员通常不使用独立的引用变量或引用数据成员,引用最常见的用途是用于函数的参数。

2023-12-07 12:36:21 50

原创 链表-142(中等)环形链表Ⅱ

分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。这是因为fast是走两步,slow是走一步,其实相对于slow来说,fast是一个节点一个节点的靠近slow的,所以fast一定可以和slow重合。当n=1时,x = z ,意味着,从头结点出发一个结点,从相遇结点出发一个结点,一次只走一步,这两个指针相遇时就是环形入口点。则 x+n(y+z)+y = 2 * (x+y);

2023-12-06 20:46:32 107 1

vc++6.0绿色汉化完整版

Microsoft Visual C++,(简称Visual C++、MSVC、VC++或VC)是Microsoft公司推出的以C++语言为基础的开发Windows环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过的设置就可使其生成的程序框架支持数据库接口、OLE2.0,WinSock网络

2019-04-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除