数据结构与算法
数据结构与算法
暗隐之光
这个作者很懒,什么都没留下…
展开
-
贪心法之活动安排问题
给定n个活动,每个活动有一个开始时间si和结束时间fi,选择出最大的互不相容的活动 集合。依次考虑剩余的活动,如果当前活动的开始时间晚于等于上一个已选活动的结束时间,则将该活动加入最终的选择集合中。最后剩下的区间3 [5, 7] 的起始位置大于preEnd,可以选择。接着剩下区间2 [3, 6] 的起始位置小于preEnd,无法选择。首先选择右端点最小的区间1 [1, 4],更新preEnd为4。选中的区间序号为1和3,选中的区间个数为2。所以最优解是选择区间1和3。原创 2023-12-22 17:39:00 · 441 阅读 · 0 评论 -
回溯法之0/1背包问题
确定状态表示:由于每个物品只有选或不选两种状态,因此可以使用一个长度为 N 的 01 序列 x 表示选或不选,其中 x[i] = 1 表示选第 i 个物品,x[i] = 0 表示不选第 i 个物品。确定状态转移方程:对于每个物品 i,有两种情况:选或不选。如果选第 i 个物品,则将背包容量减去 w[i],同时将总价值加上 v[i]。如果不选第 i 个物品,则直接进入下一个物品的选择过程。输出结果:在 DFS 结束后,可以输出选取的物品和对应的重量和价值,以及总价值。原创 2023-12-22 17:15:43 · 452 阅读 · 0 评论 -
蛮力法之背包问题
有 n 个重量分别是 w1,w2....,wn 的物品(物品编号为 1-n)它们的价值分别为 v1,v2,...,vn。物品编号 重量 价值。每个物品要么选中要么不选中【其实每个物品只有 1 件】,要求选中的物品不仅能够放在背包中,而且具有最大的价值。给定一个容量为 W 的背包。设计从这些物品中选取一部分放入该背包的方案。并对如下所展示的 5 个物品求出 W=10 时的最佳解。原创 2023-12-21 23:29:39 · 562 阅读 · 0 评论 -
回溯法之计算操作符
设计一个算法在 1,2,……9(顺序不变)数值之间插入+或者-或者什么都不插入, 使得计算结果总是 100 的程序。//例如 1 + 2 + 34 - 5 + 67 - 8 + 9 = 100。原创 2023-12-21 18:43:33 · 435 阅读 · 0 评论 -
动态规划之整数拆分
将整数n拆分为将其拆分为至少两个正整数的和,且拆分的最大数为k,求解所有的拆分情况。原创 2023-12-21 15:42:07 · 559 阅读 · 0 评论 -
动态规划之最长公共子序列
对于字符串 "ABCDGH" 和 "AEDFHR",它们的最长公共子序列是 "ADH"。在这个例子中,两个字符串中的字符 "A"、"D" 和 "H" 出现在了最长公共子序列中,而且它们的顺序在两个字符串中都一致。描述的是在两个序列中找到一个最长的子序列,使得该子序列在两个原序列中都出现,但不一定是连续的。3.当元素左方和上方的元素不相同时,相应位置的值为左方和上方的元素中值较大的那个数的值。2.当元素左方和上方的元素相同时,相应位置的值为左上角的值加1。原创 2023-12-06 16:33:38 · 104 阅读 · 0 评论 -
动态规划求解0/1背包问题
你有一个背包和一些物品,每个物品都有自己的体积和价值。背包有一个最大的体积限制。目标是选择一些物品放入背包,使得背包中物品的总价值最大,同时保证背包中物品的总体积不超过背包的体积限制。原创 2023-12-05 16:32:27 · 111 阅读 · 0 评论 -
动态规划求解 fibonacci 数列
从i=2开始,迭代计算出第i项的值,即F(i) = F(i-1) + F(i-2)。这个值可以直接由数组中的前两个元素得到,所以不需要进行额外的函数调用。创建一个数组,大小为n+1,用于存储斐波那契数列的值。数组的第i个元素对应斐波那契数列的第i项。初始化数组的前两个元素,即F(0) = 0,F(1) = 1。循环结束后,数组中的最后一个元素就是斐波那契数列的第n项。原创 2023-12-05 15:07:02 · 500 阅读 · 0 评论 -
贪心法之柠檬水找零
每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。对于 20 美元的找零,我们需要优先使用一张 10 美元和一张 5 美元来找零,因为这样可以让手里的 5 美元硬币更多,以备后续使用。如果手里没有足够的 10 美元和 5 美元,则可以使用三张 5 美元来找零。遍历每个顾客支付的金额,如果是 5 美元,则不需要找零;对于 10 美元的找零,我们需要首先判断手里是否有足够的 5 美元来找零。分别表示手里拥有的 5 美元和 10 美元的数量,初始值都为 0。如果没有,则无法找零,返回。原创 2023-12-04 16:09:16 · 244 阅读 · 0 评论 -
贪心法之购物问题
顾客在超市购买物品一共消费 x 元【任意输入 x 的值,x 的值在 1 到 100 之间,并且是整数】。【告知前提所有的纸币数量充足下,纸币包含面额是 100 元、50 元、20 元、5 元、1 元】2.我们按照纸币的面额从大到小进行计算,优先使用大面额的纸币。我们计算当前面额纸 币 的 数量,并更新剩余需要找零的金额,直到找零的金额为 0 为止。1.我们需要计算需要找回的金额,即 100 减去顾客消费的金额 x。3.输出各面额纸币的数量,即为超市收银员应该找回给顾客的纸币数量。原创 2023-12-03 23:12:56 · 662 阅读 · 0 评论 -
蛮力法最大值连续子序问题
在一个给定的整数数组中找到一个连续的子序列,使得子序列的元素之和最大。在每次计算过程中,记录当前最大的子序列和。遍历所有可能的子序列,计算它们的和。返回最大的子序列和作为结果。原创 2023-12-03 17:43:20 · 455 阅读 · 0 评论 -
蛮力法之冒泡排序
从数组的第一个元素开始,依次比较相邻的两个元素,如果它们的顺序不符合要求(比如要求升序排列,而前一个元素大于后一个元素),则交换它们的位置。经过一轮比较和交换后,数组中最大(或者最小,取决于排序顺序)的元素将被“冒泡”到数组的末尾位置。接着对剩下的未排序部分重复以上操作,直到整个数组排序完成。原创 2023-12-01 13:03:55 · 473 阅读 · 0 评论 -
蛮力法之选择排序
【代码】蛮力法之选择排序。原创 2023-12-01 09:37:12 · 167 阅读 · 0 评论 -
分治法之二分查找
【代码】分治法之二分查找。原创 2023-12-01 00:17:12 · 155 阅读 · 0 评论 -
分治法之查找最大值
【代码】分治法之查找最大值。原创 2023-11-30 23:42:03 · 311 阅读 · 0 评论 -
分治法之归并排序
【代码】分治法之归并排序。原创 2023-11-30 19:49:42 · 102 阅读 · 0 评论 -
分治法之快速排序
从右向左找到第一个小于基准值的元素,从左向右找到第一个大于基准值的元素,将它们进行交换。将数组分为两部分,一部分是小于基准值的元素,另一部分是大于基准值的元素。将基准值与位置 i 上的元素交换,此时基准值已经放置到正确的位置上。对这两部分分别进行递归排序,直到子数组长度为 1 或 0。定义两个指针 i 和 j,分别指向数组的左右两端。对基准值左边和右边的子数组分别进行递归排序。选择一个基准值,通常是数组中的第一个元素。合并排序好的两部分,得到最终排序结果。合并排序好的两部分,得到最终排序结果。原创 2023-11-29 13:45:16 · 91 阅读 · 0 评论 -
递归实现全排列
【代码】递归实现全排列。原创 2023-11-28 14:19:47 · 216 阅读 · 0 评论 -
递归实现fib数列第n项的值
fib数列: 1 1 2 3 5 8 13 .....不难发现从第三项开始,每一位的值等于前两项的值的和相加。原创 2023-11-28 15:28:01 · 266 阅读 · 1 评论 -
递归实现选择排序.
3.接着将剩余未排序的元素中的最大值或最小值与第二个元素交换位置。[ 1, 3, 5, 8, 9 ] //排序完成后的数组。[ 1, 5, 8, 9, 3 ] //3与8交换。[ 1, 3, 8, 9, 5 ] //3与5交换。[ 1, 3, 5, 9, 8 ] //9与8交换。[ 8, 5, 1, 9, 3 ] //原始数组。1.定位数组中的最大元素或最小元素。2.将其与第一个元素交换位置。4.以此类推,直到排序完成。原创 2023-11-27 21:54:24 · 836 阅读 · 0 评论 -
递归实现冒泡排序.
/2.如果当前元素大于或小于后面的元素,则交换位置。//4.再进行多次遍历数组,直到数组完成排序。//3.继续比较,直到数组的最后一个元素。//1.从数组的第一个元素开始,比较。原创 2023-11-27 23:39:48 · 702 阅读 · 0 评论