【贪心算法】day10

【贪心算法】day10

📝前言说明:

  • 本专栏主要记录本人的贪心算法学习以及LeetCode刷题记录,按专题划分
  • 每题主要记录:(1)本人解法 + 本人屎山代码;(2)优质解法 + 优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话);(4)贪心策略正确性的 “证明”
  • 文章中的理解仅为个人理解。如有错误,感谢纠错
🎬个人简介:努力学习ing
📋本专栏:C++刷题专栏
📋其他专栏:C语言入门基础python入门基础C++学习笔记Linux
🎀ZEEKLOG主页 愚润泽

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

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

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

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

题单获取【贪心算法】题单汇总

题目


1262. 可被三整除的最大和

题目链接:https://leetcode.cn/problems/greatest-sum-divisible-by-three/description/

在这里插入图片描述

优质解

思路:

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

代码:

classSolution{public:intmaxSumDivThree(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 ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( n ) O(n) O(n)


1054. 距离相等的条形码

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

在这里插入图片描述

优质解

思路:

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

代码:

classSolution{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 ( n l o g n ) O(nlogn) O(nlogn)
空间复杂度: O ( n ) O(n) O(n)


767. 重构字符串

题目链接:https://leetcode.cn/problems/reorganize-string/description/

在这里插入图片描述

个人解

思路:

  • 和上一题方法一样,不过多做了一些处理
    屎山代码:
classSolution{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)


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

Read more

Flutter 三方库 in_date_utils 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、高效的日期逻辑处理与万年历算法引擎

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 in_date_utils 的鸿蒙化适配指南 - 在鸿蒙系统上构建极致、高效的日期逻辑处理与万年历算法引擎 在鸿蒙(OpenHarmony)系统的日历、任务管理或考勤应用中,如何快速计算某月的天数、判断闰年、或优雅地对日期进行加减操作?in_date_utils 为开发者提供了一套开箱即用的日期增强工具集。本文将深入实战其在鸿蒙生态中的应用。 前言 什么是 in_date_utils?它是 Dart 原生 DateTime 的强力补丁。在 Flutter for OpenHarmony 的实际开发中,我们经常需要处理诸如“上周一的日期”、“本月最后一个周五”等复杂的业务逻辑。利用该库,我们可以避免重复编写琐碎的日期数学运算,让鸿蒙应用的代码更加简洁、易读且稳健。 一、

By Ne0inhk
数据结构之八大排序算法

数据结构之八大排序算法

前言:各位铁子们好啊,博客已经好久没有更新了。今天就来看看新的文章吧。 在日常生活中,我们能够发现在许多地方会存在排序的问题。比如学校排名,成绩排名,手机销量排名等等。而常见的排序有八种,我们一起来看看都有哪八种排序算法。 1. 直接插入排序 直接插入排序的基本思想是:将待排序的关键码值按照大小插入到一个已经有序的序列中,直到将所有的关键码值插入完为止,得到一个新的有序序列。 //时间复杂度O(N^2)voidInsertSort(int* arr,int n){for(int i =0; i < n;++i){int tmp = arr[i];int end = i -1;while(end >=0){if(arr[end]> tmp)

By Ne0inhk
【强化学习】双延迟深度确定性策略梯度算法(TD3)详解

【强化学习】双延迟深度确定性策略梯度算法(TD3)详解

📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在👉强化学习专栏:        【强化学习】- 【单智能体强化学习】(11)---《双延迟深度确定性策略梯度算法(TD3)详解》 双延迟深度确定性策略梯度算法(TD3)详解 目录 一、TD3算法的背景 二、TD3的背景 1.TD3的理论背景 2.DDPG的局限性 三、TD3算法的核心思想 1.双Critic网络(Twin Critics) 2.延迟更新(Delayed Policy Updates) 3.目标策略平滑(Target Policy Smoothing) 四、TD3算法详细讲解 1.

By Ne0inhk
无中生有——无监督学习的原理、算法与结构发现

无中生有——无监督学习的原理、算法与结构发现

“世界上绝大多数数据都没有标签。 真正的智能,不是在已知答案中选择,而是在混沌中发现秩序。” ——无监督学习的哲学 一、为什么需要无监督学习? 在前七章中,我们系统学习了监督学习(Supervised Learning)的核心范式:给定输入 x\mathbf{x}x 和对应标签 yyy,学习映射 f:x↦yf: \mathbf{x} \mapsto yf:x↦y。无论是线性回归、决策树,还是神经网络,都依赖于标注数据这一稀缺资源。 然而,现实世界的数据绝大多数是未标注的: * 用户浏览日志(只有行为,没有“好/坏”标签); * 医学影像(只有图像,没有诊断结论); * 社交网络(只有连接关系,没有群体划分); * 传感器时序(只有数值流,没有异常标记)

By Ne0inhk