贪心算法(1)


二叉树的递归套路暂时先告一段落了,今天来聊聊贪心算法。

一、什么是贪心算法

1、最具自然智慧的算法

用最普通的思维就能想到的解决方法。

2、用一种局部最功利的标准,总是做出在当前看来是最好的选择

3、难点在于证明局部最功利的标准可以得到全局最优解

4、对于贪心算法的学习主要以增加阅历和经验为主

对于每一个利用贪心算法求解的题目,实际采取的贪心策略都是不同的,也就是说当前的贪心策略并不能帮助你解决另外的贪心题目,但是能够增加你的经验,让你学会如何尝试。

5、只要能够使用对数器校验策略是对的即可

对于每一个贪心策略,在提出之初,不能举出明显的反例,我们就可以尝试按此写出代码来,然后用最暴力的方式写出对数器来校验,校验通过则说明我们的贪心策略是对的,否则就需要换一个贪心策略了。

至于如何去证明验证通过的贪心策略真的就是对的,这不是我们需要关心的事情,把证明留给做学术研究的就可以了。

二、从头到尾讲一道贪心算法的题目

1、题目描述

给定一个由字符串组成的数组strs,必须把所有的字符串拼接起来,返回所有拼接结果中,字典序最小的结果。

字典序定义:Java中字符串的排序方式,比如 “abc” 和 “bce”相比,“abc” 第一位a的ASCII码小于 “bce” 第一位b的ASCII码,所以 “abc” < “bce”,所以“abc”的字典序更小。对于位数不等的字符串,“abc” 和 “be”,从各自的第一位开始比较,“abc”的a小于“be”的b,所以“abc” < “be”。

2、思路

(1)错误的

可能最直观的解法就是,所有字符串按字典序先排序,将排序后的字符串依次拼接起来就是最后的结果。

反例:[“b”, “ba”],各字符串按字典序先排序的结果是[“b”, “ba”],最后拼接的字符串是"bba",但是本例的最终结果是"bab",因为"bab" < “bba”。所以这样的贪心策略是错的。

(2)正确的

对于任意两个字符串 A和B,如

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值