每日一题力扣 1262 https://leetcode.cn/problems/greatest-sum-divisible-by-three/
、
题解
这道题目核心就算是要知道如果x%3=2的话,应该要去拿%3=1的数字,这样子才能满足%3=0
贪心
sum不够%3的时候,就减去余数为1的或者余数为2的 需要注意 两个余数为1会变成余数为2的,所以可能减去2个余数为1
核心代码如下
public int maxSumDivThreeOther(int[] nums) {
int sum = Arrays.stream(nums).sum();
if (sum%3==0){
return sum;
}
// 要么减去1的 要么减去2的
ArrayList<Integer> a1 = new ArrayList<>();
ArrayList<Integer> a2 = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
if (nums[i]%3==1){
a1.add(nums[i]);
}
if (nums[i]%3==2){
a2.add(nums[i]);
}
}
Collections.sort(a1);
Collections.sort(a2);
// 判断减去哪个
int max=0;
if (sum%3==1&&!a1.isEmpty()){
max=Math.max(max,sum-a1.get(0));
}
if (sum%3==1&&a2.size()>=2){
max=Math.max(max,sum-a2.get(0)-a2.get(1));
}
if (sum%3==2&&!a2.isEmpty()){
max=Math.max(max,sum-a2.get(0));
}
if (sum%3==2&&a1.size()>=2){
max=Math.max(max,sum-a1.get(0)-a1.get(1));
}
return max;
}
dp
不需要知道前面几个选了什么
1.dpi 表示0-i 选了若干个,余数总共是j的 最大数值
然后在前面几个0,i-1选择数值为s的,然后(s+x)%3 =j 算出s=(j-x)%3 这样子,不过如果出现负号的话,还是需要先+3的
如下代码
public int maxSumDivThreeOther2(int[] nums) {
int n=nums.length;
//1.dp[i][j] 表示0-i 选了若干个,余数总共是j的 最大数值
int[][] dp = new int[n+1][3];
// 2.递推式 是要求从前i-1个 拿数值s ,要求j的位置上 (s+x)%3==j 所以s=(j-x)%3 由于(j-x)%3 可能是符号 -2 -1 这种 所以要+3
dp[0][0]=0;
//非法数字 0个数字余数是1 为了避免选择这个 就后续可以让0和Integer.MIN_VALUE比较
dp[0][1]=Integer.MIN_VALUE;
dp[0][2]=Integer.MIN_VALUE;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < 3; j++) {
int pre=(j-nums[i-1])%3;
if ((j-nums[i-1]) %3<0){
pre+=3;
}
dp[i][j]=Math.max(dp[i-1][j],dp[i-1][pre ]+nums[i-1]);
}
}
return dp[n][0];
}
每日一题力扣 1262 https://leetcode.cn/problems/greatest-sum-divisible-by-three/的更多相关文章
- 刷题-力扣-剑指 Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de ...
- 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器
剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...
- 刷题-力扣-541. 反转字符串 II
541. 反转字符串 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-string-ii 著作权归领扣网络所有. ...
- 刷题-力扣-113. 路径总和 II
113. 路径总和 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/path-sum-ii 著作权归领扣网络所有.商业转载请联系 ...
- 刷题-力扣-1137. 第 N 个泰波那契数
1137. 第 N 个泰波那契数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-th-tribonacci-number 著作权 ...
- 刷题-力扣-LCP 07. 传递信息
LCP 07. 传递信息 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/chuan-di-xin-xi 著作权归领扣网络所有.商业转 ...
- 刷题-力扣-168. Excel表列名称
168. Excel表列名称 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/excel-sheet-column-title 著作权 ...
- 刷题-力扣-337. 打家劫舍 III
337. 打家劫舍 III 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/house-robber-iii 著作权归领扣网络所有.商 ...
- 刷题-力扣-230. 二叉搜索树中第K小的元素
230. 二叉搜索树中第K小的元素 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kth-smallest-element-in-a ...
- 刷题-力扣-剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de- ...
随机推荐
- DG修复:清理归档配置归档清理脚本
问题描述:DG同步断了十天,发现FRA归档盘符满了.需要清理下,重新增量恢复DG Error 12528 received logging on to the standby FAL[client, ...
- 计算机基础和linux安装及帮助
一.按系列罗列linux的发行版,并描述不同发行版之间的联系与区别 Linux可以分为两种版本: 1.商业版:最常见的如Redhat和centos,是属于商业公司维护的发行版本,其中很多软件都是需要收 ...
- django使用多个数据库实现
一.说明: 在开发 Django 项目的时候,很多时候都是使用一个数据库,即 settings 中只有 default 数据库,但是有一些项目确实也需要使用多个数据库,这样的项目,在数据库配置和使用的 ...
- extend笔记
JavaScript面向对象 继承extend 1. 概念(主要用途) 将子类中的共性代码 ( 属性和方法 ) 抽取出来 放到父类中 每当有一个新的子类需要用到共性的属性或者方法时 不需要在自己内容复 ...
- Object o = new Object();
对象的创建过程: 1,申请内存,并初始化: 2,构造器初始化: 3,o指向对象. 对象在内存中的存储布局: 使用jol工具打印java对象在内存的存储布局: 其中,对象头的组成: 对象头包括Mark ...
- QUIC在京东直播的应用与实践
作者:京东零售 周凯 一. 前言与背景 国内的互联网直播技术从2005年前后兴起,彼时最具代表性的直播产品是由PPLive创始人姚欣在华中科技大学就读期间发起的校园直播项目PPLive.当时的直播技术 ...
- Grafana系列-统一展示-7-ElasticSearch数据源
系列文章 Grafana 系列文章 ElasticSearch 数据源 Grafana内置了对Elasticsearch的支持.你可以进行多种类型的查询,以可视化存储在Elasticsearch中的日 ...
- Vue2到Vue3的改变
一.Vue2->Vue3 如果有Vue2的基础,并在此基础上学习Vue3,并不需要把完整的官网看完,我们只需要关注一下新功能和非兼容的变化即可进行开发. 二.Vue3变化 统一元素上使用的v-i ...
- 2022-08-04:输入:去重数组arr,里面的数只包含0~9。limit,一个数字。 返回:要求比limit小的情况下,能够用arr拼出来的最大数字。 来自字节。
2022-08-04:输入:去重数组arr,里面的数只包含0~9.limit,一个数字. 返回:要求比limit小的情况下,能够用arr拼出来的最大数字. 来自字节. 答案2022-08-04: 从左 ...
- 2021-03-30:给定一个整数组成的无序数组arr,值可能正、可能负、可能0。给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和<=K,并且是长度最大的。返回其长度。
2021-03-30:给定一个整数组成的无序数组arr,值可能正.可能负.可能0.给定一个整数值K,找到arr的所有子数组里,哪个子数组的累加和<=K,并且是长度最大的.返回其长度. 福大大 答 ...