五月集训 (第04天) —— 贪心

Posted 英雄哪里出来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五月集训 (第04天) —— 贪心相关的知识,希望对你有一定的参考价值。

文章目录

前言

        此为《英雄算法联盟:算法集训》的内容,具体内容详见:知识星球:英雄算法联盟。加入星球后,即可享用星主 CSDN付费专栏 免费阅读 的权益。
        欢迎大家积极在评论区留言发表自己的看法,知无不言,言无不尽,养成每天刷题的习惯,也可以自己发布优质的解题报告,供社区一同鉴赏,吸引一波自己的核心粉丝。
        希望大家先自己思考,如果实在没有想法,再看下面的算法思路,如果有思路但是写不出来,可以参考朋友圈中其他人的代码,总有一款是适合你的,关注一下他,取其之长,补给之短。
        今天集训的内容是:贪心
        前三题较为简单,第四题需要进行一定的思考,如果想不出来,可以先记录下,后续再来做。

一、练习题目

题目链接难度
1221. 分割平衡字符串★☆☆☆☆
1827. 最少操作使数组递增★☆☆☆☆
2144. 打折购买糖果的最小开销★☆☆☆☆
1400. 构造 K 个回文字符串★★☆☆☆

二、算法思路

1、分割平衡字符串

        (1)由于本身一定是一个平衡字符串,所以一定可以通过切割转换成 n 个平衡字符串。
        (2)利用一个统计变量,线性扫描整个字符串,遇到 L 则加一,遇到 R 则减一,当统计变量为零的时候,贪心的切一刀,计时器加一。
        (3)返回这个计数器。

2、最少操作使数组递增

        (1)扫描整个数组;
        (2)记录前一个数,如果 当前的数前一个数,则把 当前的数 变成 前一个数+1;否则,不用变;
        (3)更新前一个数;

3、打折购买糖果的最小开销

        (1)因为要购买所有的糖果,还有一些送的,所以能够让送的糖果的价值尽量大,那么我们购买的价值就会相应的小;
        (2)但是想要得到购买的糖果,必须先买两个糖果,并且满足它的价格需要 ≤ 购买的两个糖果价格的 较小值。
        (3)所以,我们可以将糖果进行排列,模拟购买的过程。

4、构造 K 个回文字符串

        (1)先把所有字符映射到数组中,记录每个字符出现的数量;
        (2)然后按照两个一组去拆分,假设可以拆出 x 组;
                (2.1)如果 k > x,说明剩下的没有成组的字符,要么是 0 个,要么是 1 个,把这些字符总和加起来,和为 y,直接返回 |y - k| ≤ x,代表多出来的单个字符能不能一对一的分配到之前的偶数串中;
                (2.2)如果 k ≤ x,说明剩下了好多字符,并且剩下的偶数字符我们可以直接分配到之前的偶数串中,不影响结果,影响的是那些奇数个的字符串,统计所有奇数的字符数量(是奇数则加一),总和为 y,返回 y ≤ x

以上是关于五月集训 (第04天) —— 贪心的主要内容,如果未能解决你的问题,请参考以下文章

七月集训(第04天) —— 贪心

五月集训(第18天) —— 树

五月集训(第14天) —— 栈

五月集训(第24天) —— 线段树

五月集训(第31天) —— 状态压缩

五月集训(第25天) —— 树状数组