算法题——贪心算法(错题总结)
顾名思义,贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。
注:以下问题引入是GitHub某位大佬的著作里面的原话,这里仅供各位学习。本书永久免费地址:github.com/changgyhub/leetcode_101 。
分配问题
区间问题
做题记录
leetcode605:种花问题(难度:简单)
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。
示例 1:
输入:flowerbed = [1,0,0,0,1], n = 1
输出:true
示例 2:
输入:flowerbed = [1,0,0,0,1], n = 2
输出:false
第一次提交受书中分糖题目的影响(题目中用vector类,采用顺序和逆序两次遍历),当时没有看到两个题目之间的区别,竟也使用了两次遍历(当时一定是脑抽了,其实这题一次遍历就可以)。
当时第一次提交的错误答案:
class Solution {public boolean canPlaceFlowers(int[] flowerbed, int n) {int count=0;for(int i=0; i<flowerbed.length; i++){if(flowerbed[i]==1){break;}else{if(i>=1&&flowerbed[i-1]==1){break;}else{flowerbed[i]=1;count++;}}}for(int j=flowerbed.length-1; j>=0; j--){if(flowerbed[j]==0){break;}else{if(j<flowerbed.length-2&&flowerbed[j+1]==1){flowerbed[j]=0;count--;}else{break;}}}if(count<=n){return true;}return false;}
}
其实这里我觉得理论上是可以的,不知道为什么测试结果不太正确,而且这里的两次遍历完全是多此一举,后来看到了别人的解题思路,修改后提交:
class Solution {public boolean canPlaceFlowers(int[] flowerbed, int n) {for(int i=0; i<flowerbed.length; i++){if(flowerbed[i]==1){i++;}else if(flowerbed[i]==0&&(i+1==flowerbed.length||flowerbed[i+1]==0)){n--;i++;}}return n<=0;}
}
这里的算法思想是:从头到尾遍历一次,如果是1,则直接跳过下一个遍历,因为后两个才有可以种花的可能。如果是0,则证明前一个肯定是0,因为前一个如果是1的话可能不会遍历后一个,所以我们这里只需要再判断一下后面一个是0的话就可以种花啦。这里注意一下细节问题:如果遍历到最后一个元素,则i+1个元素是不存在的,则直接种花就可以啦。
leetcode122 买卖股票的最佳时机(难度:中等)
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
示例 1:
输入:prices = [7,1,5,3,6,4]
输出:7
解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。
总利润为 4 + 3 = 7 。
示例 2:
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
做题耗时25分钟。其实思路很快就有了,但可能基础不太好,写代码过程中对一些条件语句的思考耗时比较长,而且测试用例错误,加上修修改改,,自然耗时比较长了。提交了一次就通过了,相比之前还是有进步的。
class Solution {public int maxProfit(int[] prices) {int profit=0;int buy=0;int sell=0;while(sell<prices.length){if(prices[sell]<=prices[buy]){buy=sell;}else{if(sell+1==prices.length || prices[sell+1]<prices[sell]){profit = prices[sell]-prices[buy]+profit;buy = sell;}}sell++;}return profit;}}
提交结果:
算法思路:设定两个指针buy(买入)和sell(卖出),再设置总利润profit。遍历一遍数组,当prices[sell]比prices[buy]低时,则不会卖出,否则亏本,这时经较低价格的price[sell]赋值给买入;当prices[sell]比prices[buy]高时,再判断prices[sell+1]是否更高,更高则不宜卖出,当prices[sell+1]<peices[sell]则卖出,每次卖出的价格都累计到profit中。这里再注意一下当遍历到结尾的情况,此时不存在sell+1。
算法题——贪心算法(错题总结)相关推荐
- 贪心算法适用条件_【算法】贪心算法
概念&&介绍 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解.所以说只有证明局部最优解在全局最优解 ...
- 3.Python算法之贪心算法思想
贪心算法 1.什么是贪心算法 2.贪心算法的特点和思路 3.贪心算法的缺点 4.贪心算法的基本思路 5.贪心算法的基本过程 6.贪心算法解决"找零"问题 6.贪心算法解决" ...
- c语言怎么编辑错题本,嵌入式错题本
做嵌入式题时候的错题本: 1.在c语言中,一个函数不写返回值类型,默认的返回类型是int 2.在C语言中的sizeof既是运算符也是关键字(strlen是函数,顺便复习一下他两个的区别:https:/ ...
- js逻辑训练题_二建冲刺必刷300题!精选历年真题+母子题+模考易错题!
订阅公众号,回复[口诀],获取完整版实务口诀 你是不是常常疑惑为什么同样在做题,同样熬通宵,同样很努力,为什么有人顺利拿证,有人却因几分之差黯然落榜? 因为二建不仅拼努力的程度,更要拼对精准二建信息的 ...
- 回溯算法和贪心算法_回溯算法介绍
回溯算法和贪心算法 回溯算法 (Backtracking Algorithms) Backtracking is a general algorithm for finding all (or som ...
- 五大算法之三--贪心算法
一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解. 贪心算法没有固定的 ...
- java调度问题的贪心算法_贪心算法——换酒问题
知识回顾 贪心算法 (greedy algorithm),又称贪婪算法. 是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法. 贪心算法在 有最优子 ...
- 任务分配算法c语言程序,程序员算法基础——贪心算法
原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...
- java 3_4_5判断三角形_小学四年级数学下册【填空题】易错题专项训练
原标题:小学四年级数学下册[填空题]易错题专项训练 易错题训练(填空题)1 1.把1米平均分成10分,每份是,用分数表示是,用小数表示是 2.50个0.1和4个0.01组成的数是. 3.10.496精 ...
- python贪心算法最短路径_dijkstra算法(贪心算法)——解决最短路径问题
最短路径 给定一张带权图和其中的一个点(作为源点),求源点到其余顶点的最短路径 基本思想 1)源点u,所有顶点的集合V,集合S(S中存有的顶点,他们到源点的最短路径已经确定,源点u默认在S中),集合V ...
最新文章
- wukong引擎源码分析之索引——part 3 文档评分 无非就是将docid对应的fields信息存储起来,为搜索结果rank评分用...
- 常见的面试题(整理)
- 文巾解题 7. 整数反转
- mysql通过命令创建数据库和导入数据库
- python有道自动翻译_利用python写一个有道翻译的脚本
- 支付宝工程师创造出了一个可以“拷贝”支付宝的神器
- SAP License:未分配差异的另类查询办法
- 服务器link系统命令,可以使用命令(7)来查看网络接口的运行情况。输入该命令后,系统的输出信息如下。...
- 十、K8s 其他控制器(DS、RC、RS、STS)
- ytkah网站建设解决方案 大中小微企业营销利器
- 地理空间数据云下载的DEM数据拼接问题
- 电力巡检解决方案解决方案
- 神州数码交换机配置基本命令
- 百词斩平板Android,百词斩ipad电脑版
- 单树莓派/双树莓派+USRP+srsLTE分布式搭建4G LTE微基站
- python冒号_python数组冒号取值操作
- Python带我飞:50个有趣而又鲜为人知的Python特性
- SDNU QLU 2022.10.15 新生赛
- 【Paper】2013_Event-triggering Sampling Based Leader-following Consensus in Second-order Multi-agent S
- 如何解决Mathtype在Word中功能区是灰色的情况
热门文章
- BlueTooth: 蓝牙技术应用-蓝牙耳机有关资料汇集
- Ubuntu 下多个终端多开的工具 tmux
- SharePoint 2010 名言警句 Web部件
- 计算机毕业设计英语参考文献,计算机毕业设计外文参考文献
- html js 正则表达式语法大全,详解js正则表达式语法介绍
- 用java输出正方形,等腰三角形,直角三角形
- U8W/U8W-Mini使用与常见问题解决
- 中兴媒体服务器vs3000,超然录播系统 MRS3000多媒体录播服务器--投影时代产品专区...
- Terns Pharmaceuticals拓臻生物与翰森制药签署TRN-000632大中华区独家产品授权合作协议
- 一个前端程序员的日常生活