算法与数据结构
文章平均质量分 76
zzz1_1zzz
这个作者很懒,什么都没留下…
展开
-
整数拆分题
给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。说明: 你可以假设n不小于 2 且不大于 58。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/integer-break著作权归领扣...原创 2021-06-17 23:12:24 · 391 阅读 · 0 评论 -
利用栈结构实现O(1)查询最小值
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路:利用两个栈来进行操作,一个存正常的栈数据,另一个辅助栈存放当前最小值。入栈时:如果当前没有最小值或者加入的数字小于等于当前的最小值则更新辅助栈,即push新数据,否则不操作,这里注意定义为小于等于就加入,而不是小于,因为比如出现两个相等最小,靠后那个数字被pop掉了此时最小还是那个数,所以辅助栈中维护的应该是一个单调不减的序列。出栈时:如果当前数据栈栈顶的元素等于辅助栈栈顶的元素,原创 2021-06-16 23:01:38 · 525 阅读 · 0 评论 -
贪心算法
1、活动安排问题: 设有n个活动E={1,2,...,n},其中每个活动都要求使用同一资源(如演讲会场等),且在同一时间内只有一个活动能使用这一资源。如果选择了执行活动i,则它在半开的时间区间[s[i],f[i])内占用资源,其中s[i]=f[j]或s[j]>=f[i],则称活动i与活动j是相容的。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集A。 用贪心算法求解: (1)原创 2017-04-02 19:40:13 · 621 阅读 · 0 评论 -
回溯法
1、0-1背包问题: 给定n种物品,价值分别为v[1],v[2],...,v[n],重量分别为w[1],w[2],...,w[n]。有一个背包其载重容量为c,问应如何选择装入背包中的物品,使得装入背包中的物品的总价值最大。这里每种物品只能装入一次或者不装入背包。这是一个特殊的整数线性规划问题,即在w[1]x[1]+w[2]x[2]+...+w[n]x[n] 一般情况下0-1背包问题是NP难的原创 2017-04-05 09:54:08 · 615 阅读 · 0 评论 -
分支限界法
1、单源最短路径问题: 给定一个带权有向图G=(V,E),其中每条边的权是一个非负实数,V={1,2,...,n}。设顶点v作为源顶点。要计算从源到所有其他各顶点的最短路径长度。 Dijkstra算法是解决这个问题的一个著名的贪心算法。这个问题也适合用分支限界法来求解。分支限界法类似于回溯法,也是在问题的解空间树(对这里的问题则为图)上搜索问题的解。但分支限界法采用广度优先或最小耗费优先的方原创 2017-04-05 09:57:49 · 2579 阅读 · 0 评论 -
分支限界法与回溯法的区别
分支限界法类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 由于求解目标不同,导致分支限界法与回溯法在解空间树T上的搜索方式也不相同。回溯原创 2017-04-05 09:59:44 · 29430 阅读 · 0 评论 -
各种常用的排序算法实现对数组的排序——整理总结(代码实现)
冒泡排序、插入排序、折半排序(二分插入排序)、快速排序、选择排序、归并排序、希尔排序、堆排序原创 2017-07-13 11:14:09 · 794 阅读 · 0 评论 -
数转化为二叉树
普通树转换为二叉树的方法是:①树中所有相同双亲结点的兄弟节点之间加一条连线②对树中不是双亲结点第一个孩子的结点,只保留新添加的该结点与左兄弟结点之间的连线,删去该结点与双亲结点之间的连线③整理所有保留和添加的的连线,使每个结点的第一个孩子结点连线位于左孩子指针位置,使每个结点的右兄弟结点连线位于右孩子指针位置:整个转换过程如下图从左到右所示转载 2017-08-16 10:01:22 · 3054 阅读 · 0 评论