五月集训 (第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天) —— 贪心的主要内容,如果未能解决你的问题,请参考以下文章