| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 贪心算法--合并果堆问题(c语言解析思路清晰) -> 正文阅读 |
|
[数据结构与算法]贪心算法--合并果堆问题(c语言解析思路清晰) |
?贪心算法,我也刚入门不久,个人总结了三个步骤 ①:对应关系:找到题目中到底哪里使用了贪心 ②:操作关系:怎么样的代码能够实现贪心的操作目的 ③:终止关系:在什么情况下,贪心终止,也就是什么时候结束代码 这里首先需要注意的就是,当每次相加之后,产生的新一个数不一定是序列中最小的,也就是还得进行排序,此时选择排序的方法就尤为重要 . 没懂的xd,我也给出了图解/doge/ ? ?对应关系 ?由题目中就显而易见,每次选取的两个数一定是整个序列中去操作的,而对应关系,贪心的地方就是只需要每次挑选当前序列中最小的两个. 第一步,对应关系:发现想要让消耗的体力最小,则需要每次的操作结果都是最小,也就是每次都是整个序列中最小的两个进行相加. ?okk,接下来的比较简单的地方,直接上代码 ?
??上面的变量创建我就不赘述了,接着往下 接下来是找到操作关系 不难发现只要我们在相加之后,进行简单的排序,然后就可以继续将两个最小的进行相加 那么,这道题中,两个数相加之后,在原有的数组上会少一个位置(搞不明白的去看我的Excel图解),然后我们要寻找方法,怎么去表示这个位置的变化, 我想到的方法就是,利用for循环,直接将相加结果放到两数相加的后一个元素的位置 然后体力+=后一个元素的结果值即可
?为什么这么操作? x是不断往后的,而我只需要放到后面一个元素,就能保证在接下来的x++中,不会再与前一项有所牵连。 这是第一个操作关系 那么还有一个,就是排序
?注意越界的问题,所以我直接用y为后一项,y-1为前一项来表示了. 我觉得也可以使用while还有冒泡排序,我这个似乎是交换了,欢迎大家贴出这两种方法的代码在评论区撒~ ?终止关系 其实就是下面这几句
最后附上我的运行图~ ? 欢迎大家来访~ 我是广州悠扬,一只奋发跟大佬步伐,并且励志成为优秀程序员的大一娃 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:49:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |