LeeCode 5455 贪心 + BIT
题意
传送门 LeeCode 5455. 最多 K 次交换相邻数位后得到的最小整数
题解
求最小整数,贪心地将尽可能小的数字移动到尽可能高的位数上。从最高位开始,每次处理一位;从小到大枚举数字 0−90-90−9 最靠近当前处理数位的索引,若索引值的差小于等于 kkk,则该数字可以移动到这一位上;反之,枚举下一个数字。从后向前扫描,维护 0−90-90−9 从大至小出现的索引值。
由于只能交换相邻数位,则当某一数字向高位移动时,该数位与所移动数字的位置之间全部的数字都向后移动一位。用 BITBITBIT 维护索引值,由于未使用的数字相对位置不会改变,按照其原始索引处理即可;每次移动原始索引为 iii 的数字至当前待处理的最高数位时,区间 [0,i][0,i][0,i] 所有索引值增 111,代表区间内尚未使用的数字向后移动一位。
class Solution
{#define maxn 30005
public:int bit[maxn], n;void add(int i, int x){while (i <= n){bit[i] += x;i += i & -i;}}int sum(int i){int s = 0;while (i > 0){s += bit[i];i -= i & -i;}return s;}int cnt[10], id[10][maxn];string minInteger(string num, int k){n = num.length();string res = "";for (int i = n - 1; i >= 0; i--){char c = num[i] - '0';id[c][cnt[c]++] = i;}memset(bit, 0, sizeof(bit));for (int i = 0; i < n; i++){for (int j = 0; j < 10; j++){if (cnt[j] == 0) continue;int p = id[j][cnt[j] - 1], s = p - i + sum(p + 1);if (s > k) continue;k -= s, cnt[j]--;add(1, 1);add(p + 2, -1);res += (j + '0');break;}}return res;}
};
LeeCode 5455 贪心 + BIT相关推荐
- LeeCode 1488 贪心 + STL
题意 传送门 LeeCode 1488. 避免洪水泛滥 题意 顺序遍历 r a i n s rains rains, s e t set set 维护可用以排水的日子, m a p map map 维 ...
- LeeCode:救生艇(贪心)
问题描述 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保 ...
- Leecode 738. 单调递增的数字 贪心
原题链接:Leecode 738. 单调递增的数字 代码写的是真烂,,,可读性就是"仅自己可读"的程度... class Solution {public:int monotone ...
- Leecode题解汇总(附题型归类)
虽然已找到工作,但不断地自我学习和自我磨砺是无止境的. 为方便量化和总结经验,记录一下个人的Leecode刷题记录,之前的刷题并没有收录进去,有时间会统一整理. 序号 题目 题解 类型 来源 难度 0 ...
- 贪心算法的python实现
贪心算法 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略 ...
- leecode++理解
这里写目录标题 climits头文件 1 两数相加 2 非空链表 两数相加 3 4 寻找两个有序数组的中位数 5 最长字串 6 下标规律 7 整数反转 8 8. 字符串转换整数 (atoi) 7. 整 ...
- 算法设计与分析第3章 贪心算法
第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...
- 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...
问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...
- Too Many Segments CF595D 贪心乱搞
传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...
最新文章
- 隔行如隔山 -- 乱弹技术,经济,对日外包
- SlickEdit 2016(V21)
- (C#) GDI+简单绘图画直线
- HDU 1874 SPFA算法Dijkstra算法
- SAP UI5框架中,onInit方法执行次数的讨论
- pyqt安装_Win10下安装LabelImg以及使用(绝对是全网最简单的教程)
- 20155207实验2 Windows口令破解
- RequireJS简单教程
- vue中warning_5种处理Vue异常的方法
- 源码阅读:SDWebImage(五)——SDWebImageFrame
- Linux之|etc|group文件
- 单个圆孔菲涅耳衍射的matlab模拟,矩孔和圆孔菲涅耳衍射的计算机模拟
- 计算机酒店管理论文,计算机专业酒店管理系统毕业论文.doc
- python 全国省市区列表查询
- Md5加密工具类DigestUtils
- SpringBean的生命周期
- 苹果x和xsmax有什么区别_苹果手机OLED屏幕与LCD屏幕有什么区别
- 计算机同步时间解析错误,Windows时间同步时出错该怎么解决?
- 每日加瓦,终成栋房4-final、内部类、权限修饰符
- Python+Vue计算机毕业设计停车场管理系统8f46a(源码+程序+LW+部署)