贪心day5

news2024/10/23 19:05:09

文章目录

  • 前言
  • 三次操作后最大值与最小值的最小差
  • 心算挑战
  • 可被三整除的最大和
  • 令牌放置
  • 通过最少操作次数使数组的和相等

前言

💫你好,我是辰chen,本文旨在准备考研复试或就业
💫文章题目大多来自于 leetcode,当然也可能来自洛谷或其他刷题平台
💫欢迎大家的关注,我的博客主要关注于考研408以及AIoT的内容
🌟 仅给出C++版代码

以下的几个专栏是本人比较满意的专栏(大部分专栏仍在持续更新),欢迎大家的关注:

💥ACM-ICPC算法汇总【基础篇】
💥ACM-ICPC算法汇总【提高篇】
💥AIoT(人工智能+物联网)
💥考研
💥CSP认证考试历年题解

三次操作后最大值与最小值的最小差


题目链接:三次操作后最大值与最小值的最小差

C++版AC代码:

class Solution {
public:
    int minDifference(vector<int>& nums) {
        int n = nums.size();
        if (n < 5) return 0;

        sort(nums.begin(), nums.end());
        int sl[4] = {0};
        for (int i = 0; i < 4; ++ i )
            sl[i] = nums[n + i - 4] - nums[i];
        sort(sl, sl + 4);

        return sl[0];
    }
};

心算挑战


题目链接:心算挑战

C++版AC代码:

class Solution {
public:
    int maximumScore(vector<int>& cards, int cnt) {
        sort(cards.begin(), cards.end(), greater<>());
        
        int res = 0;
        for (int i = 0; i < cnt; ++ i ) 
            res += cards[i];
        
        if (!(res % 2)) return res;

        int sl1res = res, sl2res = res;
        // 找到前cnt中最小的奇数与数组后面最大的偶数交换
        bool flag1[2] = {false, false};    // 前cnt中得存在奇数,剩下的数组存在偶数
        for (int i = cnt - 1; i >= 0; i -- ) 
            if (cards[i] % 2) {
                sl1res -= cards[i];
                flag1[0] = true;
                break;
            }
        if (flag1[0]) {
            for (int i = cnt; i < cards.size(); ++ i ) 
                if (!(cards[i] % 2)) {
                    sl1res += cards[i];
                    flag1[1] = true;
                    break;
                }
        }
        if (!flag1[0] || !flag1[1]) sl1res = 0;

        // 找到前cnt中最小的偶数与数组后面最大的奇数交换
        bool flag2[2] = {false, false};    // 前cnt中得存在偶数
        for (int i = cnt - 1; i >= 0; i -- ) 
            if (!(cards[i] % 2)) {
                sl2res -= cards[i];
                flag2[0] = true;
                break;
            }
        if (flag2[0]) {
            for (int i = cnt; i < cards.size(); ++ i ) 
                if (cards[i] % 2) {
                    sl2res += cards[i];
                    flag2[1] = true;
                    break;
            }
        }
        if (!flag2[0] || !flag2[1]) sl2res = 0;
        
        return max(sl1res, sl2res);
    }
};

可被三整除的最大和


题目链接:可被三整除的最大和

C++版AC代码:

class Solution {
public:
    int maxSumDivThree(vector<int>& nums) {
        sort(nums.begin(), nums.end());

        vector<int> n0, n1, n2;   // 取模分别为0, 1, 2
        int res = 0;
        for (auto x : nums) {
            if (!(x % 3)) n0.push_back(x);
            else if (x % 3 == 1) n1.push_back(x);
            else n2.push_back(x);
            res += x;
        }

        if (!(res % 3)) return res;
        else if (res % 3 == 1) {   // 删除n1中的一个或者删除n2中的两个
            int sl1 = 0, sl2 = 0;
            if (n1.size()) sl1 = res - n1[0];
            if (n2.size() >= 2) sl2 = res - n2[0] - n2[1];
            res = max(sl1, sl2);
        } else {                   // 删除n1中的两个或者删除n2中的一个
            int sl1 = 0, sl2 = 0;
            if (n1.size() >= 2) sl1 = res - n1[0] - n1[1];
            if (n2.size()) sl2 = res - n2[0];
            res = max(sl1, sl2);
        }

        return res;
    }
};

令牌放置


题目链接:令牌放置

C++版AC代码:

class Solution {
public:
    int bagOfTokensScore(vector<int>& tokens, int power) {
        sort(tokens.begin(), tokens.end());

        vector<int> res;
        int cures = 0;
        for (int i = 0, j = tokens.size() - 1; i <= j; ++ i) {
            if (power >= tokens[i]) {
                cures ++;
                res.push_back(cures);
                power -= tokens[i];
            }else if (cures > 0){
                cures --;
                res.push_back(cures);
                power += tokens[j];
                j --, i --;
            }
        }

        if (res.empty()) return 0;
        sort(res.begin(), res.end(), greater<>());

        return res[0];
    }
};

通过最少操作次数使数组的和相等


题目链接:通过最少操作次数使数组的和相等

C++版AC代码:

class Solution {
public:
    int minOperations(vector<int>& nums1, vector<int>& nums2) {
        int len1 = nums1.size(), len2 = nums2.size();
        int maxlen = max(len1, len2), minlen = min(len1, len2);
        // 无解
        if (maxlen > minlen * 6) return -1;
        
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());
        int sum1 = accumulate(nums1.begin(), nums1.end(), 0);
        int sum2 = accumulate(nums2.begin(), nums2.end(), 0);

        int t = sum1 - sum2;
        // 无需操作
        if (t == 0) return 0;

        vector<int> l, s;
        if (t >= 0) l = nums1, s = nums2;
        else l = nums2, s = nums1;
        t = max(t, -t);                 // t恒正, 其值代表两个数组的数值差距
        reverse(l.begin(), l.end());    // l从大到小排序, s从小到大排序, 方便操作

        int res = 0, i = 0, j = 0;
        // 根据题意,使两个数组的和相等可以等价为使和较小的数组相等或超过和较大的数组
        while (t > 0) {
            // sl1 代表的是s数组可以变大的极限, sl2 代表的是l数组可以变小的极限
            int sl1 = 0, sl2 = 0;
            if (i < s.size()) sl1 = 6 - s[i];
            if (j < l.size()) sl2 = l[j] - 1;
            
            if (sl1 >= sl2) {
                t -= sl1;
                s[i ++] = 6;
            } else {
                t -= sl2;
                l[j ++] = 1;
            }
            res ++;
        }

        return res;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一、python基础

python基础 认识Python1. Python介绍1.1 为什么学习Python1.2 Python发展历史 2. 语言分类简介2.1 编译型2.2 解释型 Python环境搭建1. Python 解释器1.1 Python解释器下载1.2 Python解释器安装 2. 解释器运行Python脚本2.1 演练步骤 PyCharm1. PyCharm介绍2. PyCharm安装3. Py…

15分钟学Go 第6天:变量与常量

第6天&#xff1a;变量与常量 在Go语言中&#xff0c;变量和常量是编程的基础概念。理解如何定义和使用它们不仅能帮助我们管理数据&#xff0c;还能增强代码的可读性和可维护性。在本章中&#xff0c;我们将详细探讨Go语言中的变量和常量&#xff0c;涵盖它们的定义、使用、作…

机器学习建模分析

机器学习 5.1 机器学习概述5.1.1 机器学习与人工智能5.1.2 python机器学习方法库 5.2 回归分析5.2.1 回归分析原理5.2.2 回归分析实现 5.3 分类分析5.3.1 分类学习原理5.3.2 决策树5.5.3 支持向量机 5.4 聚类分析5.4.1 聚类任务5.4.2 K-means算法 5.5 神经网络和深度学习5.5.1神…

python配合yolov11开发分类训练软件

上一篇文件写了用yolo分类模型开发分类软件&#xff0c;这边文章在上个分类软件的基础上加入训练功能环境配置:pycharm&#xff0c;PySide6 6.6.1 &#xff0c;PySide6-Addons 6.6.1&#xff0c;PySide6-Essentials 6.6.1&#xff0c;torch 2.3.1cu121&#xff0c;torchaudio 2…

dynadot设置域名动态DNS(DDNS)

需求&#xff1a;本地测试代理&#xff0c;代理需要绑定IP或者域名&#xff0c;本地IP是动态变化的&#xff0c;解决办法就是给域名设置动态DNS 1.dynadot设置 开启动态DNS选项会显示动态DNS密码&#xff0c;该密码后续将会用在DDNS-GO工具上 2.DDNS-GO设置 GitHub介绍页面&a…

WIFI、NBIOT、4G模块调试AT指令连接华为云物联网服务器(MQTT协议)

一、前言 随着物联网&#xff08;IoT&#xff09;技术的飞速发展&#xff0c;越来越多的设备开始连接到互联网&#xff0c;形成了一个万物互联的世界。在这个背景下&#xff0c;设备与云端之间的通讯变得尤为重要。 本文将探讨几种常见的无线通信模块——EC20-4G、Air724ug-4…

每天花2分钟学数字化转型,第四讲:数字化转型

一文看懂&#xff1a;数字化转型是什么&#xff1f;以及数字化转型的根本任务与核心路径。 定义&#xff1a;数字化是人类社会的进化&#xff0c;绝不仅仅是一个企业的问题&#xff0c;也不是某一项技术的问题&#xff0c;而是时代的变迁。数字化转型指的是从当前信息化环境下…

RabbitMQ系列学习笔记(三)--工作队列模式

文章目录 一、工作队列模式原理二、工作队列模式实战1、抽取工具类2、消费者代码3、生产者代码4、查看运行结果 本文参考 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、工作队列模式原理 与简单模式相…

企业级 接口自动化测试框架:Pytest+Allure+Excel

1. Allure 简介 简介 Allure 框架是一个灵活的、轻量级的、支持多语言的测试报告工具&#xff0c;它不仅以 Web 的方式展示了简介的测试结果&#xff0c;而且允许参与开发过程的每个人可以从日常执行的测试中&#xff0c;最大限度地提取有用信息。 Allure 是由 Java 语言开发…

MySQL 【日期】函数大全(七)

目录 1、UNIX_TIMESTAMP() 将指定的日期/日期时间转为 UNIX 时间戳值。 2、WEEK() 返回给定日期位于当年的第几周。 3、WEEKDAY() 返回给定日期的工作日编号。 4、WEEKOFYEAR() 返回给定日期位于当年的第几周 5、YEAR() 提取日期的年份部分并作为数字返回。 6、YEARWEEK()…

Jmeter 实战 JDBC配置

​ JDBC JDBC&#xff08;Java Database Connectivity&#xff09;是一种用于执行SQL语句的Java API。通过这个API&#xff0c;可以直接连接并执行SQL脚本&#xff0c;与数据库进行交互。 使用JMeter压力测试时&#xff0c;操作数据库的场景 在使用JMeter进行接口压力测试时…

Gin 协程mysql客户端

一、Gin框架 mysql配置 这里选择yaml文件配置 二、配置读取 viper 读取yaml文件中对应配置 三、mysql 的协程客户端 文件位置 package databaseimport ("database/sql""fmt""github.com/spf13/viper""log""net/http"&quo…

JavaWeb 25.Vite

目录 一、Vite的介绍 二、Vite创建Vue3工程化项目 ViteVue3项目的创建、启动、停止 创建 启动 停止 干净感来源于对自我的驯服 —— 24.10.23 一、Vite的介绍 在浏览器支持 ES 模块之前&#xff0c;JavaScript 并没有提供原生机制让开发者以模块化的方式进行开发。这也正是我们…

Missing classes detected while running R8报错解决方案

Android 打包release版本时报错如下&#xff1a; > Task :printlib:minifyReleaseWithR8 FAILED AGPBI: {"kind":"error","text":"Missing classes detected while running R8. Please add the missing classes or apply additional ke…

canvas-editor首行缩进

canvas-editor中渲染部分的源码都在Draw.ts里&#xff0c;能找到computeRowList方法中并没有实现首行缩进相关的逻辑&#xff0c;但是实现了element.type ElementType.TAB的缩进&#xff0c;如图&#xff1a; 因此我们可以基于tab进行首行缩进的逻辑编写&#xff0c;在main.ts…

通过DevTools逃离Chrome沙盒(CVE-2024-6778和CVE-2024-5836)

介绍 这篇博文详细介绍了如何发现CVE-2024-6778和CVE-2024-5836的&#xff0c;这是Chromium web浏览器中的漏洞&#xff0c;允许从浏览器扩展&#xff08;带有一点点用户交互&#xff09;中进行沙盒逃逸。 简而言之&#xff0c;这些漏洞允许恶意的Chrome扩展在你的电脑上运行…

2015年-2017年 计算机技术专业 程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析

文章目录 20151.C语言算法设计部分2.数据结构算法设计部分 20161.C语言算法设计部分2.数据结构算法设计部分 2017年1. C语言算法设计部分2.数据结构算法设计部分 2015 1.C语言算法设计部分 int total(int n) {if(n1) return 1;return total(n-1)n1; } //主函数测试代码已省略…

Android 15 推出新安全功能以保护敏感数据

Android 15 带来了增强的安全功能&#xff0c;可保护您的敏感健康、财务和个人数据免遭盗窃和欺诈。 它还为大屏幕设备带来了生产力改进&#xff0c;并对相机、消息和密钥等应用进行了更新。 Android 防盗保护 Google 开发并严格测试了一套全面的功能&#xff0c;以在盗窃之…

Ubuntu22.04 制作系统ISO镜像

第一步&#xff1a;安装软件-Systemback 1.如果已经添加过ppa&#xff0c;可以删除重新添加或者跳过此步 sudo add-apt-repository --remove ppa:nemh/systemback 2.添加ppa 我是ubuntu20&#xff0c;但这个软件最后支持的是 ubuntu16.04版本&#xff0c;所以加一个16版本…

【Docker】Harbor 私有仓库和管理

目录 一、搭建本地私有仓库 二、harbor简介&#xff08;特性、构成、架构的数据流向&#xff09; 2.1 什么是Harbor 2.2 Harbor的特性 2.3 Harbor的构成 2.4 Harbor的工作原理&#xff08;运行流程&#xff09; 三、harbor部署以及配置文件 1. 部署 Docker-Compose 服…