题意

传送门 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相关推荐

  1. LeeCode 1488 贪心 + STL

    题意 传送门 LeeCode 1488. 避免洪水泛滥 题意 顺序遍历 r a i n s rains rains, s e t set set 维护可用以排水的日子, m a p map map 维 ...

  2. LeeCode:救生艇(贪心)

    问题描述 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保 ...

  3. Leecode 738. 单调递增的数字 贪心

    原题链接:Leecode 738. 单调递增的数字 代码写的是真烂,,,可读性就是"仅自己可读"的程度... class Solution {public:int monotone ...

  4. Leecode题解汇总(附题型归类)

    虽然已找到工作,但不断地自我学习和自我磨砺是无止境的. 为方便量化和总结经验,记录一下个人的Leecode刷题记录,之前的刷题并没有收录进去,有时间会统一整理. 序号 题目 题解 类型 来源 难度 0 ...

  5. 贪心算法的python实现

    贪心算法 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略 ...

  6. leecode++理解

    这里写目录标题 climits头文件 1 两数相加 2 非空链表 两数相加 3 4 寻找两个有序数组的中位数 5 最长字串 6 下标规律 7 整数反转 8 8. 字符串转换整数 (atoi) 7. 整 ...

  7. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  8. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  9. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

最新文章

  1. 隔行如隔山 -- 乱弹技术,经济,对日外包
  2. SlickEdit 2016(V21)
  3. (C#) GDI+简单绘图画直线
  4. HDU 1874 SPFA算法Dijkstra算法
  5. SAP UI5框架中,onInit方法执行次数的讨论
  6. pyqt安装_Win10下安装LabelImg以及使用(绝对是全网最简单的教程)
  7. 20155207实验2 Windows口令破解
  8. RequireJS简单教程
  9. vue中warning_5种处理Vue异常的方法
  10. 源码阅读:SDWebImage(五)——SDWebImageFrame
  11. Linux之|etc|group文件
  12. 单个圆孔菲涅耳衍射的matlab模拟,矩孔和圆孔菲涅耳衍射的计算机模拟
  13. 计算机酒店管理论文,计算机专业酒店管理系统毕业论文.doc
  14. python 全国省市区列表查询
  15. Md5加密工具类DigestUtils
  16. SpringBean的生命周期
  17. 苹果x和xsmax有什么区别_苹果手机OLED屏幕与LCD屏幕有什么区别
  18. 计算机同步时间解析错误,Windows时间同步时出错该怎么解决?
  19. 每日加瓦,终成栋房4-final、内部类、权限修饰符
  20. Python+Vue计算机毕业设计停车场管理系统8f46a(源码+程序+LW+部署)

热门文章

  1. 云服务器硬件加速是灰色的,win7系统显卡硬件加速显示灰色不能设置的解决方法...
  2. 响应式自适应公司网站官网源码分享
  3. 如何解决稀疏奖励下的强化学习?
  4. 苹果浏览器滚动会卡顿的问题
  5. 禄劝一中高考成绩查询2021,禄劝彝族苗族自治县第一中学2021年排名
  6. centos7.9安装MySQL-学习
  7. Qt实现模拟微信联系人列表
  8. arcgis读取oracle数据库,arcgis连接Oracle数据库
  9. 优酷客户端埋点质量保障三步曲
  10. 锚点与页面滚动事件解决方案(H5、小程序)