首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

贪心算法问题-LeetCode 55、45(贪心算法,跳跃问题

贪心算法问题:LeetCode #55 #45 1 编程题 【LeetCode #55】跳跃游戏 给定一个非负整数数组,你最初位于数组的第一个位置。...算法原理: 遍历整个nums数组,每次计算从i位置的最大可能到达的距离,然后依次更新这个最大值,如果最大值大于nums的大小nums.size(),那么就返回true, 否则返回false....这就是正常人取求解这个问题的思路,很容易想到的!...你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。...说明: 假设你总是可以到达数组的最后一个位置 算法原理: 由于题目中规定总能到达数组的最后一个位置,因此我们在遍历数组时每次都要去找最大的跳跃位置,只有到达了这个最远的边界end,我们才让step进行自加

1.3K60

活动安排问题--贪心算法

活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。该问题要求高效地安排一系列争用某一公共资源的活动。...贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。   ...也就是说,该算法贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。   此算法的效率极高。...贪心算法并不总能求得问题的整体最优解。但对于活动安排问题贪心算法却总能求得的整体最优解,即它最终所确定的相容活动集合A的规模最大。这个结论可以用数学归纳法证明。...A[i] = true; j=i; } else A[i] = false; } } 应用实例: 问题描述

2.6K60
您找到你想要的搜索结果了吗?
是的
没有找到

贪心算法(集合覆盖问题)

首先来看一个集合覆盖问题: 假如存在下面需要付费的广播台,以及广播台信号可以覆盖的地区,如何选择最少的广播台,让所有地区都可以接收到信号?...这个问题就是经典的用贪心算法求解的问题贪心算法是指在每一步选择中都采取最优的策略,从而希望能够导致结果是最优的一种算法贪心算法所得到的结果并不一定是最优的解,但都是相对接近最优解的结果。...在这32中组合中挑选一种可以覆盖到8个地区,并且广播台最少的组合,那就是本题的解了。 这样做显然很麻烦,要是有100个广播台,那不是完犊子了。但是可以使用贪心算法,提高效率。...贪心算法步骤如下: 遍历所有的广播台,找到一个包含了最多当前还未覆盖地区的广播台; 将这个广播台存起来,想办法把该广播台覆盖的地区中下次选择时,用别的广播台代替; 重复上面的步骤直到覆盖了所有的地区。...三、代码实现: 将上面的问题用代码实现出来。

1.2K20

贪心算法之背包问题

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。...贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。...完全背包问题:给定n个物品和一个容量为C的背包,物品i的重量是Wi,其价值为Vi,背包问题是如何选择入背包的物品,使得装入背包的物品的总价值最大,与0-1背包的区别是,在完全背包问题中,可以将物品的一部分装入背包...设计算法的思路很简单,计算物品的单位价值,然后尽可能多的将单位重量价值高的物品放入背包中。...python实现代码如下: 1 # coding=gbk 2 # 完全背包问题贪心算法 3 import time 4 __author__ = 'ice' 5 6 7 class

1.1K60

贪心算法之区间调度问题

什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。...比如说一个算法问题使用暴力解法需要指数级时间,如果能使用动态规划消除重叠子问题,就可以降到多项式级别的时间,如果满足贪心选择性质,那么可以进一步降低时间复杂度,达到线性级别的。...然而,大部分问题都明显不具有贪心选择性质。比如打斗地主,对手出对儿三,按照贪心策略,你应该出尽可能小的牌刚好压制住对方,但现实情况我们甚至可能会出王炸。...这种情况就不能用贪心算法,而得使用动态规划解决,参见前文 动态规划解决博弈问题。 一、问题概述 言归正传,本文解决一个很经典的贪心算法问题 Interval Scheduling(区间调度问题)。...或者选择出现冲突最少的那个区间?这些方案都能很容易举出反例,不是正确的方案。

1.1K10

算法笔记(0002) - 【贪心算法】活动安排问题

算法笔记(0002) - 【贪心算法】活动安排问题 贪心算法 原理 在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。...能够用贪心算法求解的问题一般具有两个重要特性:贪心选择性质和最优子结构性质。 1、贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。...这是贪心算法可行的第一个基本要素。贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。...但是最优解显然是安排其它两个,而放弃[3,7),可见这个贪心策略也是不行的。 ? 最少冲突的活动优先, 既然上面安排活动是想减少冲突,那么如果我们优先安排冲突最少的活动可以么?...ACM–贪心算法–活动安排问题

1K20

使用贪心算法解决集合覆盖问题

在《算法图解》里面有一个蛮有意思的小案例,背景是一个广播节目,要让全美的50个周的听众都能够听到,但是每个电台可能覆盖多个州,每在一个电台播出就需要一笔费用,所以就是从成本的角度来看,怎么尽可能在所有的州都播出...,这是一个典型的集合覆盖的问题,而且在我们的生活中算是比较典型。...比如我们先缩小范围,指定5个州,那么50个州也是同样的算法。...如何使用贪心算法呢,就是选择覆盖尽可能多的州的电台,然后逐步缩小范围。那么覆盖面广的州所对应的电台就优先被选中,依次类推。...当然贪心算法得到的不是精确的结果,即可能不是最优解,算是一种近似算法,能够基本得到的最优解,而且效率很高。

1.1K20

【趣学算法贪心算法、海盗古董装船问题

14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!...文章目录 贪心本质 贪心选择 最优子结构 最优装载问题 sort函数 总结 贪心本质 一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优选择得到全局最优的解决方案。...——《算法导论》 贪心选择 贪心选择是指原问题的整体最优解可以通过一系列局部最优的选择得到,也就是先做出当前最优的选择,将原问题变为一个相似却规模更小的子问题,而后的每一步都是当前最优的选择。...最优子结构 最优子结构是指原问题的最优解包含子问题的最优解。如果原问题的最优解和子问题的最优解没有关系,则求解子问题没有意义,无法采用贪心算法。...3、按照贪心策略找出最优解。

29620

【趣学算法】Day3 贪心算法——背包问题

该篇文章收录专栏—趣学算法 目录 题目描述 问题分析 算法设计  完美图解 算法详解 (1)确定合适的数据结构。 (2)对物体按单位重量价值进行排序。...(3)使用贪心算法求解问题 算法分析 ---- 题目描述         有n种物品,每种物品只有一个,第i种物品的重量为 wi,价值为 vi,背包的容量为 w,物品可以分割。...因此,我们应采用第三种贪心策略——每次从剩下的物品中选单位重量价值最大的物品。 算法设计  (1)确定合适的数据结构并初始化。...return a.p > b.p; // 指定按照物品的单位重量价值进行降序排列 } sort(s, s + n, cmp); //前两个参数分别为待排序数组的首地址和尾地址,cmp为比较函数 (3)使用贪心算法求解问题...0.0; //sum表示已经装入物品的价值之和 double cleft = w; //背包的剩余容量 for(int i = 0; i < n; i++) { //是用贪心算法求解问题

1K30

【趣学算法】Day2 贪心算法——最优装载问题

该篇文章收录专栏—趣学算法 ---- 目录 一、贪心算法 (1)介绍 (2)注意事项 (3)性质 1)贪心选择 2)最优子结构 二、最优装载问题 (1)古董重量排序 (2)贪心策略选择 模板代码 (...3)选择什么样的贪心策略直接决定了算法的好坏。 (3)性质         人们通过实践发现,利用贪心算法求解的问题往往具有两个重要的性质:贪心选择和最优子结构。...只要满足这两个性质,就可以使用贪心算法。...1)贪心选择         贪心选择是指原问题的整体最优解可以通过一系列局部最优的选择得到:先做出当前最优的选择,将原问题变为一个相似却规模更小的子问题,而后的每一步都是当前最优的选择。...贪心算法通过一系列的局部最优解(子问题的最优解)得到全局最优解(原问题的最优解),如果原问题的最优解和子问题的最优解没有关系,则求解子问题没有任何意义,无法采用贪心算法

71210

贪心算法(二)——一般背包问题

注:背包问题分为两种,若每个物体不可分割,则称为0/1背包问题,这种问题无法用贪心法求的最优解,只能求的近似解。而若每个物体可以切分,则称为一般背包问题,可以使用贪心法求的最优解。...下面讨论的就是一般背包问题。 结果集 一般背包问题中,结果集可以用一个n元组表示: 1. x的下标i表示物体的序号; 2. xi表示第i个物体加入背包的部分(0<=xi<=1) ?...目标函数 使用贪心法解决最优化问题的第一步,就是要从题目中抽象出目标函数,这是一个数学建模的过程。 本题中,目标函数就是当前背包收益的最大值: ?...lastBody = bodys.get(i); results.add(new Body(lastBody.id,rest,(lastBody.p*rest/lastBody.w)); } 总结 要用贪心法解决一个最优化问题...若无法选出一个最优量度标准,则可以使用动态规划法解决最优化问题

2K70

算法浅谈——怪盗基德的珠宝选择问题贪心算法

学过算法的同学会一眼就看出来,这是一个背包问题。 ? 我们假装没学过,就按照常理来分析。显然ABC三个珠宝当中A珠宝是最值钱的,由于基德每次只能打开一个柜子,理论上来说应该先拿A。...也就是说贪心法是会有反例的。 贪心法有反例这个结论并不难,很容易想明白,难的是我们如何判断当前的问题下,能不能使用贪心算法呢?尤其是我们可能一时半会想不出反例的情况下。...事实上课本当中谈及贪心算法,也根本不会阐述这个问题,然而这个问题在实际当中又是非常重要的。那么,什么叫均等假设法呢?...很简单,就是假设我们在某次决策的时候,面临两个势均力敌的选项,我们通过判断这两个选项最终的结果是否一致来判断贪心算法是否成立。如果两个均等的选项最终结果一致,那么贪心算法可行,否则不可行。...那么这个时候,我们就认为贪心算法是可行的。 上述的原理我想大家应该都能看明白,不过可能还会有人有这样一个疑问。

60730

动态规划问题总结

动态规划和贪心算法的区别 相同点 动态规划和贪心算法都是一种递推算法 。 均有局部最优解来推导全局最优解 。...贪心算法最经典的例子,给钱问题。 比如中国的货币,只看元,有1元2元5元10元20、50、100 如果我要16元,可以拿16个1元,8个2元,但是怎么最少呢?...但是一定注意,贪心得到的并不是最优解,也就是说用贪心不一定是拿的最少的张数 贪心只能得到一个比较好的解,而且贪心算法很好想得到。 再注意,为什么我们的钱可以用贪心呢?...问题二 如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元? (表面上这道题可以用贪心算法,但贪心算法无法保证可以求出解,比如1元换成2元的时候) 状态: ?...如果存在多条最短路径,那么输出花钱数量最少的那条。限制: ? 对于每个 ? , ? ;正如我们所看到的,如果没有额外的限制条件(在结点处要收费,费用不足还不给过) 状态: ?

1.1K30

算法书上都没写,背包问题为什么不能用贪心法解?

五分钟搞定贪心算法,从此不惧大厂面试 今天呢我们来聊一个在学习贪心法的时候一个非常经典的问题:如何判断贪心法有没有反例呢?...一看问题,求最大价值,很多人第一反应就是贪心法。但很遗憾,这道问题不能使用贪心法求解。...关于这个问题,我当年acm队长的教练交给了我们一个原创的方法——均等假设法。实际上我也仅仅从学长的口中学到了这个方法,任何算法书上都没有提到过,绝对的核心知识。...所以绕了这么一圈,我们还是可以下结论,采用均等假设法没有发现矛盾,说明这个贪心策略是可行的。 总结 贪心法和二分法一样,属于很直观一下就能学会的算法。...但是算法简单不代表题目也简单,在竞赛和面试当中经常会遇到很多很难的贪心法的问题。 这些问题的难点有两个,一个是贪心策略不好找,另外一个就是有很多干扰项,有一些策略不可行,但是很难发现。

86341
领券