一、概念定义
贪心问题让人又爱又恨,因为贪心问题没有固定的解法,相比动态规划而言,贪心问题要难起来,会更难。
贪心问题的难点在于 「 证明 」,也就是说,你怎么知道这种做法是对的,有时候可能只是想当然。
本文会介绍一种比较常用的贪心策略,就是最值贪心。简而言之,就是在保证问题正确性的前提下,每次取最大的,或者每次取最小的,从而解决问题。
二、题目描述
给你一个字符串
num,表示一个大整数。请你在字符串num的所有非空子字符串中找出值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 “” 。
子字符串是字符串中的一个连续的字符序列。
三、算法详解
贪心问题,往往是伴随着一些其它问题出现的,所以我们要从问题中找到一些 “常识性” 问题。比如这个问题中,有这么些常识性问题:
(1)奇数的充要条件是数字的最后一位是奇数;
(2)数字的长度越长,数字越大;
基于第(1)点,这个子串的最后一个位必须是奇数;
基于第(2)点,这个大整数,从第 0 个位置开始,一定比从一个非零位置开始,长度更长。·
四、源码剖析
char
《算法零基础100讲》第62讲介绍了最值贪心策略,通过寻找字符串中最大奇数子串来阐述贪心问题。文章解释了如何证明贪心策略的正确性,并提供了源码分析,强调在保证正确性前提下每次选取最大或最小元素。此外,还推荐了相关数据结构学习资源。
订阅专栏 解锁全文
1万+

被折叠的 条评论
为什么被折叠?



