[Algorithm][贪心][可被三整除的最大和][距离相等的条形码][重构字符串]详细讲解

目录

  • 1.可被三整除的最大和
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 2.距离相等的条形码
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现
  • 3.重构字符串
    • 1.题目链接
    • 2.算法原理详解
    • 3.代码实现


1.可被三整除的最大和

1.题目链接

  • 可被三整除的最大和

2.算法原理详解

  • 思路:正难则反 + 贪心 + 分类讨论
    • 先把所有的数累加在一起,根据累加和,删除一些数
      请添加图片描述

    • 补充如何求一堆数中的最小值以及次小值?

      • sort()
      • 分类讨论 --> O ( N ) O(N) O(N)

3.代码实现

int maxSumDivThree(vector<int>& nums) 
{const int INF = 0x3f3f3f3f;int sum = 0;int x1 = INF, x2 = INF, y1 = INF, y2 = INF;for(auto& x : nums){sum += x;if(x % 3 == 1){if(x < x1){x2 = x1;x1 = x;}else if(x < x2){x2 = x;}}else if(x % 3 == 2){if(x < y1){y2 = y1;y1 = x;}else if(x < y2){y2 = x;}}}// 分类讨论if(sum % 3 == 0){return sum;}else if(sum % 3 == 1){return max(sum - x1, sum - y1 - y2);}else{return max(sum - y1, sum - x1 - x2);}
}

2.距离相等的条形码

1.题目链接

  • 距离相等的条形码

2.算法原理详解

  • 解法:贪心 + 模拟
    • 每次处理一批相同的数
      • 摆放的时候,每次隔一个格子
    • 先处理出现次数最多的那个数
      • 剩下的数的处理顺序无所谓

3.代码实现

vector<int> rearrangeBarcodes(vector<int>& b) 
{unordered_map<int, int> hash;int maxVal = 0, maxCount = 0;for(auto x : b){if(maxCount < ++hash[x]){maxCount = hash[x];maxVal = x;}}int n = b.size();int index = 0;vector<int> ret(n);// 先处理出现次数最多的那个数for(int i = 0; i < maxCount; i++){ret[index] = maxVal;index += 2;}// 处理剩下的数hash.erase(maxVal);for(auto& [x, y] : hash){for(int i = 0; i < y; i++){if(index >= n){index = 1;}ret[index] = x;index += 2;}}return ret;
}

3.重构字符串

1.题目链接

  • 重构字符串

2.算法原理详解

  • 解法:贪心 + 模拟
    • 前置判断maxCount > (n + 1) / 2则无解
    • 每次处理一批相同的数
      • 摆放的时候,每次隔一个格子
    • 先处理出现次数最多的那个数
      • 剩下的数的处理顺序无所谓

3.代码实现

string reorganizeString(string s) 
{int hash[26] = { 0 };char maxChar = ' ';int maxCount = 0;for(auto ch : s){if(maxCount < ++hash[ch - 'a']){maxChar = ch;maxCount = hash[ch - 'a'];}}int n = s.size();if(maxCount > (n + 1) / 2){return "";}int index = 0;string ret(n, ' ');for(int i = 0; i < maxCount; i++){ret[index] = maxChar;index += 2;}hash[maxChar - 'a'] = 0;for(int i = 0; i < 26; i++){for(int j = 0; j < hash[i]; j++){if(index >= n){index = 1;}ret[index] = 'a' + i;index += 2;}}return ret;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/444951.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

326. 3 的幂

文章目录 326. 3 的幂解题思路Go代码 326. 3 的幂 326. 3 的幂 给定一个整数&#xff0c;写一个函数来判断它是否是 3 的幂次方。如果是&#xff0c;返回true&#xff1b;否则&#xff0c;返回 false 。 整数 n 是 3 的幂次方需满足&#xff1a;存在整数 x 使得 n 3 x n …

Android设置状态栏隐藏、固定颜色

设置隐藏效果&#xff1a; <?xml version"1.0" encoding"utf-8"?> <resources><style name"Theme.XiaoShuang" parent"Theme.AppCompat.Light.NoActionBar"><!--设置沉浸式通知栏--><item name"an…

Nullinux:一款针对Linux操作系统的安全检测工具

关于Nullinux Nullinux是一款针对Linux操作系统的安全检测工具&#xff0c;广大研究人员可以利用该工具针对Linux目标设备执行网络侦查和安全检测。 该工具可以通过SMB枚举目标设备的安全状况信息&#xff0c;其中包括操作系统信息、域信息、共享信息、目录信息和用户信息。如…

292. Nim 游戏

文章目录 292. Nim 游戏解题思路Go代码 292. Nim 游戏 292. Nim 游戏 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。你们轮流进行自己的回合&#xff0c; 你作为先手 。每一回合&#xff0c;轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的…

Elasticsearch的安装与配置

注意&#xff1a;elasticsearch 禁止安装在/root路径下&#xff01; 1、创建用户组 groupadd elastic 2、创建用户 useradd es -d /home/es -g elastic echo es | passwd es --stdin 3、给新创建的用户进行授权 chown -R es:elastic /home/es chmod -R 775 /home/es 4…

『网络游戏』游戏数据库管理类查询插入账号存储【23】

新建数据库连接 新建数据库 打开数据库 新建表 账号数据 设计表 - 添加属性 对照服务器工程GameMsg增加对应字段 保存后在服务器脚本中操作数据库数据 添加数据层文件夹 创建脚本&#xff1a;DBMgr 编写脚本&#xff1a;DBMgr.cs 修改脚本&#xff1a;ServerRoot.cs 将MySql.d…

Java值传递、序列化详解

Java 值传递详解 说到参数&#xff0c;我们先来搞懂一下这两个概念 形参&实参 值传递&引用传递 形参&实参 方法的定义可能会用到 参数&#xff08;有参的方法&#xff09;&#xff0c;参数在程序语言中分为&#xff1a; 实参&#xff08;实际参数&#xff0c;…

10.11作业

实现简单数据库功能 &#xff08;增删改查&#xff09; widget.h #ifndef WIDGET_H #define WIDGET_H #include <QSqlDatabase> // 数据库管理类 #include <QWidget> // #include <QSqlQuery> #include <QSqlRecord> //记录类 #include …

若依 从字典类型跳到字典数据跳到了404

描述&#xff1a; 在字典类型从表中字典类型跳转到详情的字典数据时跳到了404 解决过程&#xff1a; 由于我的id统一是用GUID&#xff0c;所以想到了路由表相关路由的正则校验&#xff0c;若依是int类型&#xff0c;我直接删掉了&#xff0c;改了之后还是跳404 后面想是路由表…

【微服务】网关 - Gateway(下)(day8)

网关过滤工厂 在上一篇文章中&#xff0c;主要是对网关进行了一个总体的介绍&#xff0c;然后对网关中的断言进行了一个描述。在这篇文章中&#xff0c;主要是对网关中的最后一大核心——过滤进行介绍。 当客户端发送过来的请求经过断言之后&#xff0c;如果还想在请求前后添…

智能制造与精益制造的模型搭建

现行制造模式分析I-痛点改善思路-管控省优四化推行

中间件有哪些分类?

中间件的分类 中间件是位于操作系统和应用程序之间的软件&#xff0c;它提供了一系列服务来简化分布式系统中的应用程序开发和集成。中间件可以根据其功能和用途被分为不同的类别。以下是中间件的一些主要分类&#xff1a; 1. 通信处理&#xff08;消息&#xff09;中间件&am…

利用编程思维做题之反转链表

牛客网题目 1. 理解问题 给到我们的是一个单链表的头节点 pHead&#xff0c;要求反转后&#xff0c;返回新链表的头节点。 首先在心里设想能够快速理解的例子&#xff0c;如给你123序列&#xff0c;要你反转此序列如何回答&#xff1f;将最后一个数字3作为头&#xff0c;然后修…

使用Qt Creator创建项目

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 使用Qt Creator创建项目 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 温馨提示: 1. 新…

基于SpringBoot+Vue的非物质文化遗产保护与传播系统设计实现(地图组件)

&#x1f388;系统亮点&#xff1a;地图组件&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框架Vue.js&#x…

C/C++进阶(一)--内存管理

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; 学习专栏C语言_Stark、的博客-CSDN博客 其它专栏&#xff1a; 数据结构与算法_Stark、的博客-CSDN博客 ​​​​​​项目实战C系列_Stark、的博客-CSDN博客 座右铭&a…

RDD优化:缓存和checkpoint机制、数据共享(广播变量、累加器)、RDD的依赖关系、shuffle过程、并行度说明

文章目录 1. 缓存和checkpoint机制1.1 缓存使用1.2 checkpoint1.3 缓存和checkpoint的区别 2. 数据共享2.1 广播变量2.2 累加器 3. RDD依赖关系4.shuffle过程4.1 shuffle介绍4.2 spark计算要尽量避免shuffle 5. 并行度 1. 缓存和checkpoint机制 缓存和checkpoint也叫作rdd的持…

Springboot 整合 Java DL4J 实现企业门禁人脸识别系统

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

vue后台管理系统从0到1(3)element plus 的三种导入方式

文章目录 vue后台管理系统从0到1&#xff08;3&#xff09;element plus 的三种导入方式element plus 引入方式完整引入按需导入手动导入 vue后台管理系统从0到1&#xff08;3&#xff09;element plus 的三种导入方式 element plus 引入方式 官方网址&#xff1a;https://el…

windows系统更新升级node指定版本【避坑篇!!!亲测有效】(附带各版本node下载链接)一定看到最后!不用删旧版!

Node.js 是一个开源、跨平台的 JavaScript 运行时环境&#xff0c;广泛应用于服务器端和网络应用的开发。随着 Node.js 版本的不断更新&#xff0c;我们可能需要升级到特定版本以满足项目需求或修复安全漏洞。又或者是学习开发另外一个新项目&#xff0c;新项目对Node版本要求更…