LeetCode·1262. 可被三整除的最大和·贪心

news2024/10/7 14:21:42

作者:小迅
链接:https://leetcode.cn/problems/greatest-sum-divisible-by-three/solutions/2314049/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun-r0n76/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

 

思路

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

由于数组中没有负数,如果整个数组的元素和 s 可以被 3 整除,那么 s 就是最大的元素和。

否则,如果 s 不能被 3 整除,那就看看能否让 s 减去某些 nums[i],使得 s 可以被 3 整除。

找到所有 nums[i] mod 3=1 的 nums[i],放到数组 a1 中;找到所有 nums[i] mod 3=2 的 nums[i],放到数组 a2中。对 a1和 a2 从小到大排序。分类讨论:

  • 如果 s mod 3=1:
    • 如果 a1 不为空,那么答案可能是 s−a1[0];
    • 如果 a2 中至少有两个数,那么答案可能是 s−a2[0]−a2[1];
    • 这两种情况取最大值。
    • 如果没有这样的数,返回 0。
  • 如果 s mod 3=2:
    • 如果 a2 不为空,那么答案可能是 s−a2[0];
    • 如果 a1 中至少有两个数,那么答案可能是 s−a1[0]−a1[1];
    • 这两种情况取最大值。
    • 如果没有这样的数,返回 0。

代码实现时,如果 s mod 3=2,那么可以交换数组 a1 和 a2,从而复用同一套逻辑。

代码注释超级详细

代码


static int cmp(const void *a, const void *b) {//升序
    return *(int *)a - *(int *)b;
}

int maxSumDivThree(int* nums, int numsSize) {
    int a[3][numsSize];
    memset(a, 0, sizeof(a));
    int i = 0, j = 0, sum = 0;//初始化
    for (int m = 0; m < numsSize; ++m) {//枚举所有元素
        sum += nums[m];//统计元素和
        if (nums[m] % 3 == 1) {//保存当前元素的余数
            a[nums[m] % 3][i++] = nums[m];
        } else if (nums[m] % 3 == 2) {
            a[nums[m] % 3][j++] = nums[m];
        }
    }
    if (sum % 3 == 0) return sum;//正好完成整除
    qsort(a[1], i, sizeof(a[1][0]), cmp);
    qsort(a[2], j, sizeof(a[2][0]), cmp);//升序
    int *a1 = a[1], *a2 = a[2];//指针交换位置非常方便
    if (sum % 3 == 2) {//情况二,交换指针
        a1 = a[2];
        a2 = a[1];
        int temp = i; 
        i = j;
        j = temp;
    }

    int ans = i == 0 ? 0 : sum - a1[0];//情况一判断
    if (j > 1) ans = fmax(ans, sum - a2[0] - a2[1]);//情况二判断
    return ans;
}


作者:小迅
链接:https://leetcode.cn/problems/greatest-sum-divisible-by-three/solutions/2314049/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun-r0n76/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

企业数字化转型的“整体规划”与“人才建设”有多重要?

超级干货&#xff01;&#xff01;全文爆肝5000字&#xff0c;一篇文章带你全面掌握低代码起源以及数字化转型的整体规划与人才建设&#xff0c;本文无废话&#xff0c;全程高能&#xff0c;全部都是来自于实践经验&#xff0c;纯小白也能看懂。 建议先点赞收藏&#xff0c;码…

电脑出现“无法启动此程序,因为计算机中丢失MSVCR71.dll”怎么办?

MSVCR71.dll是一个动态链接库&#xff0c;是Windows系统用于操作应用程序的文件。当某个应用程序需要文件中的某个函数时&#xff0c;将调用DLL文件。MSVCR71.dll错误通常出现于启动应用程序时&#xff0c;因此我们会收到“无法启动此程序&#xff0c;因为计算机中丢失MSVCR71.…

从0到1精通自动化测试,pytest自动化测试框架,环境准备与入门(一)

目录 一、前言 二、pytest简介 三、安装pytest 四、快速开始 五、写个测试类 六、pytest用例规则 一、前言 先说下为什么要学pytest&#xff0c;在此之前相信大伙已经掌握了python里面的单元测试单元测试框架&#xff0c;那再学一个框架肯定是需要学习时间的 刚开始我原…

019: vue中使用fetch读取本地txt文件

第019个 查看专栏目录: VUE — element UI 在做卫星项目的时候&#xff0c;会将两行根数放在txt文件中&#xff0c;放在public的文件夹中&#xff0c; 如何读取呢&#xff1f; 可以用以下方法&#xff1a; 方法1 loadFile(name) { const xhr new XMLHttpRequest() const okS…

【人工智能】— 无监督学习、K-means聚类(K-means clustering)、K-means损失函数,目标函数

【人工智能】— 无监督学习、K-means聚类&#xff08;K-means clustering&#xff09;、K-means损失函数&#xff0c;目标函数 无监督学习聚类&#xff08;Clustering&#xff09;K-means聚类&#xff08;K-means clustering&#xff09;K-means损失函数目标函数策略&#xff1…

pikachu靶场-url重定向

打开测试界面 不安全的URL跳转 发现有四条超链接&#xff0c;依次打开都会进行内容跳转 当我们点击最下面的一个超链接&#xff0c;可以看到url变成了这样 我们对urli进行参数修改 设置payload为 http://ip:port/vul/urlredirect/urlredirect.php?urlhttp://www.baidu.com输…

Unity的IL2CPP

​ 目录 背景 概念 AOT编译器 运行时库 对比 Mono IL2CPP IL2CPP打包注意事项 类型裁剪 泛型实例 泛型方法 背景 在Unity4.6.1 p5以后版本中&#xff0c;在PlayerSettings—>Other Settings—>Scripting Backend有mono和il2cpp两个选项&#xff0c;它们是Un…

面试阿里,嫌弃面试官装逼当场怒怼,“把我的简历还给我”,疑似被拉黑

好家伙&#xff0c;这奇葩事可真是多&#xff0c;前两天和粉丝聊天&#xff0c;他说前段时间面试阿里的测试岗&#xff0c;最后和面试官干起来了。 我问他为什么&#xff0c;他说没啥&#xff0c;就觉得面试官太装B了&#xff0c;就爱问一些虚而不实的东西&#xff0c;显得自己…

Web自动化中常用的跳过验证码操作

目录 前言 通过cookies值登录 通OCR识别验证码 总结 前言 自动化测试中经常需要避免手动输入验证码的操作&#xff0c;因为这会增加测试成本&#xff0c;耗费测试人员的时间。通过自动化程序跳过验证码&#xff0c;可以减少测试时间&#xff0c;提高测试效率。 安静今天通过几个…

增值税高企业发展受限怎么办?采用此方法可化险为夷!

增值税高企业发展受限怎么办&#xff1f;采用此方法可化险为夷&#xff01; 《税筹顾问》专注于园区招商&#xff0c;您的贴身节税小能手&#xff0c;合理合规节税 企业的发展&#xff0c;一方面需要依靠自身的生产经营&#xff0c;那么另一方面就需要在一些支出上尽可能的开源…

如何用 Python 给树莓派 Pico RP2040 编程

使用 MicroPython&#xff0c;仅用 8 行代码&#xff0c;我们就可以实现 LED 闪烁程序。 下载安装 Python IDE&#xff1a;Thonny Thonny 是 一个面向初学者的 Python IDE 环境&#xff0c;自带 Python&#xff0c;相对简单&#xff0c;比较容易上手。对于树莓派 Pico 开发&am…

实验篇(7.2) 12. 站对站安全隧道 - 仅一方发起连接(FortiGate-IPsec) ❀ 远程访问

【简介】上一篇实验发现&#xff0c;两端都是可以远程的公网IP的话&#xff0c;两端防火墙都可以发出连接请求&#xff0c;并且都能够连通。这样的好处是安全隧道不用随时在线&#xff0c;只在有需求时才由发起方进行连接。但是现实中很多情况下只有一端公网IP可以远程&#xf…

实战:求年月日时间前后遇到的坑和解决方式

这里写目录标题 前言正确实例&#xff1a;错误实例&#xff1a; 需求 前言 这周接到一个时间转换任务需要处理&#xff0c;本来没什么问题&#xff0c;后来完成后发现时间有偏差&#xff0c;又重写了一遍代码&#xff0c;感觉很有记录必要性&#xff0c;希望看过的小伙伴可以避…

代理ip会不会影响网络速度和稳定性

代理ip是一种可以帮助用户隐藏真实IP地址的技术&#xff0c;通常使用代理服务器作为中介来连接互联网。代理ip在网络安全、隐私保护、跨区域访问等方面都有广泛的应用。但是&#xff0c;使用 代理ip是否会影响网络速度和稳定性这一问题也一直备受关注。下面是一些有关代理ip对网…

k8s部署redis集群

写在前面 一般来说&#xff0c;REDIS部署有三种模式。 单实例模式&#xff0c;一般用于测试环境。哨兵模式集群模式 后两者用于生产部署 哨兵模式 在redis3.0以前&#xff0c;要实现集群一般是借助哨兵sentinel工具来监控master节点的状态。 如果master节点异常&#xff0c…

计算机网络管理-网络管理软件SNMPc软件的下载,安装和使用教程说明

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

树莓派4B移植5G模块驱动(RG200U-CN)

1、查看Linux内核版本 uname -r2、根据内核版本在Github上下载Linux内核源码&#xff08;最好再Github上确定一下有没有这个分支&#xff09; git clone --depth1 https://github.com/raspberrypi/linux --branch rpi-5.15.y3、下载依赖库 $ sudo apt update$ sudo apt inst…

【白话机器学习系列】白话 Dropout

白话 Dropout 文章目录 什么是Dropout理解缩放举个例子 什么是Dropout Dropout 是神经网络的一种正则化技术&#xff0c;它在训练时以指定的概率 p p p&#xff08;常见值为 p 0.5 p0.5 p0.5&#xff09;丢弃一个单元&#xff08;连同连接&#xff09;。在测试时&#xff…

【JUC并发编程】

本笔记内容为狂神说JUC并发编程部分 目录 一、什么是JUC 二、线程和进程 1、概述 2、并发、并行 3、线程有几个状态 4、wait/sleep 区别 三、Lock锁&#xff08;重点&#xff09; 四、生产者和消费者问题 五、八锁现象 六、集合类不安全 七、Callable ( 简单 )…

windows10企业版安装西门子博途V15---03安装仿真软件

1、选点这个 2、进入03.SIMATIC_PLCSIM_Advanced_V3&#xff0c;这个是什么东西&#xff0c;它就是真实的硬件设备的仿真软件&#xff0c;也就是说&#xff0c;现在没有真正的PLC硬件&#xff0c;PLC是这样的东西&#xff0c;它是一个硬件产品&#xff0c;而现在不可能去买个硬…