每日OJ题_贪心算法四⑥_力扣1262. 可被三整除的最大和

目录

力扣1262. 可被三整除的最大和

解析代码


力扣1262. 可被三整除的最大和

1262. 可被三整除的最大和

难度 中等

给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。

示例 1:

输入:nums = [3,6,5,1,8]
输出:18
解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和)。

示例 2:

输入:nums = [4]
输出:0
解释:4 不能被 3 整除,所以无法选出数字,返回 0。

示例 3:

输入:nums = [1,2,3,4,4]
输出:12
解释:选出数字 1, 3, 4 以及 4,它们的和是 12(可被 3 整除的最大和)。

提示:

  • 1 <= nums.length <= 4 * 10^4
  • 1 <= nums[i] <= 10^4
class Solution {
public:
    int maxSumDivThree(vector<int>& nums) {

    }
};

解析代码

正难则反: 可以先把所有的数累加在一起,然后根据累加和的结果,贪心地删除一些数。

分类讨论:设累加和为 sum ,用 x 标记 %3 == 1 的数,用 y 标记 % 3 == 2 的数。那么根据 sum 的余数,可以分为下面三种情况:(求最小的值和次小的值可以直接sort,也可以在求数组和的时候记录下来,时间就变为了O(N))。

  • sum % 3 == 0 ,此时所有元素的和就是满足要求的,直接返回。
  • sum % 3 == 1,此时数组中要么存在一个x(x % 3 == 1),要么存在两个y(y % 3 == 2)。因为我们要的是最大值,所以应该选择 x 中最小的那么数,记为 x1 ,或者是 y 中最小以及次小的两个数,记为 y1, y2 。那么,我们应该选择两种情况下的最大值: max(sum - x1, sum - y1 - y2) 
  • sum % 3 == 2,此时数组中要么存在一个 y(y % 3 == 2),要么存在两个 x(x % 3 == 1) 。因为我们要的是最大值,所以应该选择 y 中最小的那个数,记为 y1 ,或者是 x 中最小以及次小的两个数,记为 x1, x2 。

那么应该选择下面两种情况下的最大值: max(sum - y1, sum - x1 - x2) ;

class Solution {
public:
    int maxSumDivThree(vector<int>& nums) {
        const int INF = 0x3f3f3f3f;
        int sum = 0, x1 = INF, x2 = INF, y1 = INF, y2 = INF;
        for(auto& x : nums)
        {
            sum += x;
            if(x % 3 == 1) // 找出x % 3 == 1中x最小的和次小的
            {
                if(x < x1)
                    x2 = x1, x1 = x;
                else if(x < x2) 
                    x2 = x;
            }
            else if(x % 3 == 2) // 找出x % 3 == 2中x最小的和次小的
            {
                if(x < y1)
                    y2 = y1, y1 = x;
                else if(x < y2)
                    y2 = x;
            }
        }
        if(sum % 3 == 1)
            sum = max(sum - x1, sum - y1 - y2);
        else if(sum % 3 == 2)
            sum = max(sum - y1, sum - x1 - x2);
        return sum;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Section I:Introduction

想学习的私信&#xff0c;免费学习路线 原文 Section I&#xff1a;Introduction 1.1 Your First Java Program The classic first program when introducing any new language is Hello World, or a program that prints to the console. In Java, Hello World can be writ…

AI地名故事:笔岗村

笔岗村&#xff0c;实际上是由笔村和宏岗村两个古老的村落合并而成的。南宋度宗元年&#xff0c;也就是公元1265年&#xff0c;笔村开始建立。随着时间的推移&#xff0c;到了宋代后期&#xff0c;宏岗村也相继建立。这两个村落各自承载着丰富的历史和文化&#xff0c;最终在历…

浅析安全用电监控系统在工厂的研究与应用论述

摘 要&#xff1a;随着社会时代的发展&#xff0c;人们的安全意识越来越强烈&#xff0c;在人们生活和工作中离不开各种用电设备&#xff0c;用电设备的安全使用是保障人们生命安全的重要内容。工厂因自身厂内工作环境的特殊性&#xff0c;用电设备的种类多且复杂&#xff0c;如…

云仓酒庄携手中视中州国际传媒 开启央视广告战略合作新征程

近日&#xff0c;云仓酒庄与中视中州&#xff08;央视代理机构&#xff09;隆重举行2024-2025年度央视广告战略签约仪式&#xff0c;云仓酒庄副总裁周玄代表云仓酒庄签约。此次合作标志着云仓酒庄在品牌传播和市场营销方面迈出了坚实的一步&#xff0c;将借助央视及多家卫视的强…

星戈瑞SH-PEG3-OH一种多功能生物相容性PEG小分子

SH-PEG3-OH是一种含有硫基&#xff08;-SH&#xff09;、三个乙二醇单元和羟基&#xff08;-OH&#xff09;的小分子化合物。其分子结构中的硫基赋予了其独特的化学反应性&#xff0c;能够与其他含有不饱和键的化合物发生点击化学反应&#xff0c;如迈克尔加成反应等。同时&…

iOS 面试题总结(可能是最全的!!!)

如有错误 请及时在评论中指出 文章将不定期更新 1. objc_msgForward是干什么的&#xff0c;如果直接调用会发生什么&#xff1f; 作用&#xff1a;这个函数是IMP类型&#xff08;方法实现的内存地址也就是函数指针&#xff09;&#xff0c;用于消息转发&#xff0c;当向一个对…

iframe的替代方案有吗?做页面嵌套界面套娃

UIOTOS可以了解下&#xff0c;uiotos.net&#xff0c;通过连线来代替脚本逻辑开发&#xff0c;复杂的交互界面&#xff0c;通过页面嵌套轻松解决&#xff0c;是个很新颖的思路&#xff0c;前端零代码&#xff01; 蓝图连线尤其是独创的页面嵌套和属性继承技术&#xff0c;好家…

【Pychart】jupyter中pyecharts无法显示问题无法使用/No module named pyecharts

无法显示或No module&#xff0c;一般就是更换python版本后&#xff0c;没有在新的python里安装jupyter&#xff1b;另外原因就是引用方式问题&#xff0c;就是import方式不对&#xff1b;都解决后&#xff0c;有报错没有add&#xff0c;或者str问题。 最后的解决方案竟然是bin…

LVDS 源同步接口

传统数据传输通常采用系统同步传输方式&#xff0c;多个器件基于同一时钟源进行系统同步&#xff0c;器件之间的数据传输时序关系以系统时钟为参考&#xff0c;如图1所示。系统同步传输方式使各器件处于同步工作模式&#xff0c;但器件之间传输数据的传输时延难以确定&#xff…

【代码实践】starRocks 窗口函数(udf)实践

背景说明 实现天粒度的同比计算重点说明 要求数据是连续的因为天粒度的同比&#xff0c;需要365天&#xff0c;但为了方便测试&#xff0c;当前的判断逻辑是计算5天的前&#xff0c;而不是365天前的 参考文档 https://docs.starrocks.io/zh/docs/sql-reference/sql-functio…

流量卡避坑指南

流量卡避坑指南 在选择流量卡时&#xff0c;有几点需要注意以避免踩坑&#xff1a; 合同期和优惠期。 务必看清楚流量卡的合同期和优惠期。 有些卡可能首月免费&#xff0c;但月底办理可能不划算。 真正的长期套餐应该是优惠期20年以上的。 宣传与实际。 对于所谓的“永久9元…

C#图像处理实例1:opencvsharp获取轮廓凸包

在OpenCvSharp中&#xff0c;你可以使用Cv2.ApproxPolyDP函数来获取轮廓的凸包。这个函数使用Douglas-Peucker算法来近似轮廓。 以下是一个简单的例子&#xff0c;展示如何使用OpenCvSharp获取轮廓的凸包&#xff1a; Mat src Cv2.ImRead("保存图像\2.jpg", ImreadM…

实验名称:TCP 连接管理

目录 实验目的&#xff1a; 实验原理&#xff1a; 实验步骤&#xff1a; 1) 启动WireShark&#xff0c;设置抓包状态 2) 访问指定服务器 &#xff0c;通过Wireshark抓取通信数据报文 3) 分析TCP连接建立的三次握手和连接释放的四次握手过程 原始数据记录&#xff1a; 实…

https介绍,加密解密(举例+必要性,对称/非对称加密介绍),数字摘要/指纹(介绍,应用(session id,网盘的秒传功能))

目录 https 引入 介绍 加密解密层 介绍 没有绝对的安全 使用ssl的弊端 加密解密 概念 加密 解密 秘钥 举例 现实中 网络中 加密的必要性 常见加密方式 对称加密 特点 非对称加密 特点 数字摘要/指纹 介绍 应用 session id 百度网盘的秒传功能 https …

【数据结构课程学习】:队列学习

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;数据结构课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f697; 1.队列的基本概念&#xff1a…

xCode升级后: Library ‘iconv2.4.0’ not found

报错信息&#xff1a; targets 选中 xxxNotification: Build Phases ——> Link Binary With Libraries 中&#xff0c;移除 libiconv.2.4.0.tbd libiconv.2.4.0.dylib 这两个库&#xff08;只有一个的移除一个就好&#xff09;。 然后重新添加 libiconv.tbd 修改完…

开发者集结号:大湾区 Open Source Day 邀您共探技术前沿

开源技术正以其开放、协作的特性&#xff0c;引领着软件开发的新潮流&#xff0c;是推动社会进步的重要力量。作为开发者&#xff0c;您是否渴望深入了解开源项目的前沿动态&#xff1f;由ALC深圳与2024中国互联网发展创新与投资大赛联合举办、FISCO金链盟深度参与的大湾区 Ope…

第五十二周:文献阅读+STHTNN

目录 摘要 Abstract 文献阅读&#xff1a;用于区域空气质量预测的时空分层传输神经网络 现有问题 提出方法 创新点 方法论 周期特征提取组件(PFEC) 场景动态图模块(SDGM) 时空特征提取组件&#xff08;STEC) 传输注意力模块(TransATT) STHTNN模型 研究实验 数据集…

基于微信小程序的预约挂号系统(源码)

博主介绍&#xff1a;✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

AI算法-高数5.1-线性代数-向量定义、表示和向量间的关系

看线性代数这篇文章&#xff08;AI算法-高数5-线性代数1-基本概念、向量-CSDN博客&#xff09;理解有些吃力的朋友们&#xff0c;可以先学下宋浩老师的这些课程。 宋浩老师&#xff1a; 3.1 n维向量及其运算_哔哩哔哩_bilibili 3.2 向量间的线性关系&#xff08;一&#xff…