当前位置: 首页 > news >正文

【贪心算法】day10

📝前言说明:

  • 本专栏主要记录本人的贪心算法学习以及LeetCode刷题记录,按专题划分
  • 每题主要记录:(1)本人解法 + 本人屎山代码;(2)优质解法 + 优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话);(4)贪心策略正确性的 “证明”
  • 文章中的理解仅为个人理解。如有错误,感谢纠错

🎬个人简介:努力学习ing
📋本专栏:C++刷题专栏
📋其他专栏:C语言入门基础,python入门基础,C++学习笔记,Linux
🎀CSDN主页 愚润泽

你可以点击下方链接,进行其他贪心算法题目的学习

点击链接开始学习
贪心day1贪心day2
贪心day3贪心day4
贪心day5贪心day6
贪心day7贪心day8
贪心day9贪心day10

也可以点击下面连接,学习其他算法

点击链接开始学习
优选专题动态规划
递归、搜索与回溯贪心算法

题目

  • 1262. 可被三整除的最大和
    • 优质解
  • 1054. 距离相等的条形码
    • 优质解
  • 767. 重构字符串
    • 个人解


1262. 可被三整除的最大和

题目链接:https://leetcode.cn/problems/greatest-sum-divisible-by-three/description/
在这里插入图片描述


优质解

思路:

  • 反向思考,先把所有数加起来再删除小数字
  • 通过%3所得的结果,分类讨论

代码:

class Solution {
public:int maxSumDivThree(vector<int>& nums) {ranges::sort(nums);int s = std::accumulate(nums.begin(), nums.end(), 0);if(s % 3 == 0) return s;vector<int> a[3]; // 用来分别存储 %3 == 1  和 %3 == 2 的数,多开一个方便下标对应for(int x: nums)a[x % 3].push_back(x);int ans = 0;if(s % 3 == 2) // 删 一个%3==2 或者 两个%3==1(和下面的个数是相对的)swap(a[1], a[2]);if(a[1].size()) ans =  s - a[1][0];if(a[2].size() >= 2) ans = max(ans, s - a[2][0] - a[2][1]);return ans;}
};

时间复杂度:O(nlogn)O(nlogn)O(nlogn)
空间复杂度:O(n)O(n)O(n)


1054. 距离相等的条形码

题目链接:https://leetcode.cn/problems/distant-barcodes/description/

在这里插入图片描述


优质解

思路:

  • 贪心策略:从最多的数开始,摆放,每个一个位置摆放一个数

代码:

class Solution {
public:vector<int> rearrangeBarcodes(vector<int>& barcodes) {int n = barcodes.size();unordered_map<int, int> count;for(int x: barcodes) // 统计每个数出现的次数count[x]++;// 排序priority_queue<pair<int, int>> heap;for(auto &[x, cx] : count)heap.push({cx, x}); // 默认按第一个元素的个数排序,这样可以省的写仿函数比较器// 填写答案vector<int> ans(n, 0);int i = 0; // 从单数位置开始放while(heap.size()){auto [cx, x] = heap.top();heap.pop();for(int j = 0; j < cx; j++){if(i >= n) i = 1; // 放偶数位置ans[i] = x;i += 2;}}return ans;}
};

时间复杂度:O(nlogn)O(nlogn)O(nlogn)
空间复杂度:O(n)O(n)O(n)


767. 重构字符串

题目链接:https://leetcode.cn/problems/reorganize-string/description/
在这里插入图片描述

个人解

思路:

  • 和上一题方法一样,不过多做了一些处理
    屎山代码:
class Solution {
public:string reorganizeString(string s) {// 当个数最多的字母的个数,大于其他所有字母个数的和,那就无法重新排序int n = s.size();unordered_map <char, int> count;for(char c:s)count[c]++;priority_queue<pair<int, char>> q;int m = 0, sum = 0;for(auto [x,cx] : count){q.push({cx, x});sum += cx;m = max(m, cx);}if(sum + 1 < m * 2) return "";int i = 0;string ans(n, ' ');while(q.size()){auto [cx, x] = q.top();q.pop();for(int j = 0; j < cx; j++){if(i >= n) i = 1;ans[i] = x;i += 2;}}return ans;}
};

时间复杂度:O(n)O(n)O(n)
空间复杂度:O(n)O(n)O(n)


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!


文章转载自:

http://oUfju10S.tsgxz.cn
http://d06CChg4.tsgxz.cn
http://ET5BpriF.tsgxz.cn
http://ORYAESKG.tsgxz.cn
http://Xf9uy8yw.tsgxz.cn
http://msr5Egqv.tsgxz.cn
http://HOTcsvQQ.tsgxz.cn
http://o2AVNKQ0.tsgxz.cn
http://yAstgev0.tsgxz.cn
http://qPZb5qz7.tsgxz.cn
http://IUZOlZbJ.tsgxz.cn
http://rvTfVBbI.tsgxz.cn
http://5tTeESOR.tsgxz.cn
http://aSwa79XH.tsgxz.cn
http://fr18egRZ.tsgxz.cn
http://gmoifOO5.tsgxz.cn
http://6fQFKRp3.tsgxz.cn
http://45SAsuTQ.tsgxz.cn
http://XQJLaQ7P.tsgxz.cn
http://vZ3TGnsM.tsgxz.cn
http://MuhBIOwo.tsgxz.cn
http://Thfgk0Cu.tsgxz.cn
http://w85kvl5g.tsgxz.cn
http://Ec5G1c8W.tsgxz.cn
http://ceLQOUYs.tsgxz.cn
http://98WLxdsU.tsgxz.cn
http://PGjEirwt.tsgxz.cn
http://mpMR9yb9.tsgxz.cn
http://rnGYZGPR.tsgxz.cn
http://rIVbiAQa.tsgxz.cn
http://www.dtcms.com/a/382967.html

相关文章:

  • vue动画内置组件
  • 构建完整的RAG生态系统并优化每个组件
  • 20250914-03: Langchain概念:提示模板+少样本提示
  • Java 字符编码问题,怎么优雅地解决?
  • CopyOnWrite
  • 【Ambari监控】监控数据接口查询方法
  • shell 脚本:正则表达式
  • 可调精密稳压器的原理
  • Altium Designer(AD)PCB打孔
  • React 状态管理
  • [Spring Cloud][5] 注册中心详解,CAP 理论,什么是 Eureka
  • 返利app的跨域问题解决方案:CORS与反向代理在前后端分离架构中的应用
  • C++算法题—图的邻接矩阵输入形式(I\O)
  • 主动性算法-如何让机器拥有嗅觉?
  • Knockout.js Google Closure Compiler 工具模块详解
  • 从关键词匹配到语义理解:6大Embedding技术如何重塑企业搜索
  • 【面试实录01】
  • Docker 容器化部署核心实战——镜像仓库管理与容器多参数运行详解
  • Jenkins的安装与简单使用
  • Step-by-Step:用C语言构建一个带精准错误提示的括号匹配器
  • 【LeetCode - 每日1题】元音拼写检查器
  • KingbaseES读写分离集群架构解析
  • 教育领域大模型生成题目安全研究报告
  • .Net程序员就业现状以及学习路线图(七)
  • uniapp如何使用本身的字体图标
  • Uniapp崩溃监控体系构建:内存泄漏三维定位法(堆栈/资源/线程)
  • window显示驱动开发—显示适配器的子设备
  • 单变量单步时序预测 | TCN-BiGRU时间卷积神经网络结合双向门控循环单元
  • 项目实战——“微商城”前后台【005】之前台项目首页编写
  • 如何利用redis使用一个滑动窗口限流