LeetCode 5365. 可被三整除的最大和 Greatest Sum Divisible by Three
2024-08-30 10:29:37
地址 https://leetcode-cn.com/problems/greatest-sum-divisible-by-three/
题目描述
给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。
示例 : 输入:nums = [,,,,]
输出:
解释:选出数字 , , 和 ,它们的和是 (可被 整除的最大和)。
示例 : 输入:nums = []
输出:
解释: 不能被 整除,所以无法选出数字,返回 。
示例 : 输入:nums = [,,,,]
输出:
解释:选出数字 , , 以及 ,它们的和是 (可被 整除的最大和)。
提示: <= nums.length <= * ^
<= nums[i] <= ^
算法1
最后数组和 只有三种情况
1 除以3余0 直接返回
2 除以3余1 那么要么减少一个除以3余1的数字 或者减少两个除以3余2的数字
3 除以3余2 那么要么减少一个除以3余2的数字 要么减少两个除以3余1的数字
class Solution {
public:
vector<int> v[];
int Check(int singleIdx,int doubleIdx,int sum)
{
if (v[doubleIdx].size() < ) {
return sum - v[singleIdx][];
}
else if (v[singleIdx].size() == ) {
return sum - v[doubleIdx][] - v[doubleIdx][];
}
else {
int rem = v[singleIdx][];
if (rem > (v[doubleIdx][] + v[doubleIdx][])) rem = (v[doubleIdx][] + v[doubleIdx][]); return sum - rem;
}
} int maxSumDivThree(vector<int>& nums) {
int sum = ;
for (int i = ; i < nums.size(); i++)
{
sum += nums[i];
if (nums[i] % == ) {
v[].push_back(nums[i]);
}
else if(nums[i] % == ){
v[].push_back(nums[i]);
}
} sort(v[].begin(), v[].end());
sort(v[].begin(), v[].end());
int sum_n = sum % ; if (sum_n == ) return sum;
if (sum_n == ) {
//减少两个v2 和一个v1 选择
return Check( , ,sum);
} if(sum_n == ){
return Check( , ,sum);
} return -;
} };
最新文章
- Javascript 截取2位小数
- sizzle源码分析 (3)sizzle 不能快速匹配时 选择器流程
- TJI读书笔记07-初始化
- Django 源码小剖: Django 对象关系映射(ORM)
- js中的call与apply
- SQL查询时间去除非工作日...
- IE6 for WIN8
- Execl DataTime Format Number
- JDBC_mysql---防sql注入,存储图片
- [转] windows 上用程序putty使用 ssh自动登录Linux(Ubuntu)
- 【转】一个小工具类,利用shareObject把数据缓存
- ajax之XML简介
- C# reportview 按时间改变行颜色
- C++语言之构造函数
- onclick事件传递对象参数
- redis持久化RDB与AOF
- Access sql语句创建表及字段类型(转)
- SPOJ DQUERY - D-query (莫队算法|主席树|离线树状数组)
- [官方摘要]Setup And Configuration memcached with Tomcat
- GCT之数学公式(平面解析几何)