每日一题力扣 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- ...
随机推荐
- Python开发遇到的一些问题
1.SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.Try usin ...
- ViewGroup的TouchTarget设计思维
TouchTarget需要创建的时候先看下池子里面有没有被回收上来的,如果没有可以利用的就给你创建一个新的,否则就从池子里面把头部的那个可以利用的给你,你把你的东西放进去就行了.回收的时候就是把你放在 ...
- Python程序笔记20230306
判断闰年 初始版本 year = input('请输入一个年份:') while not year.isdigit(): year = input("抱歉,您的输入有误,请输入一个整数:&q ...
- css盒子水平垂直居中的几种方式
第一种:son盒子中定位的上下左右全部为0,然后margin:auto 1 <!DOCTYPE html> 2 <html lang="en"> 3 < ...
- 2023 年十大 API 管理趋势
本文探讨了 API 管理在数字化转型中的重要性,以及 API 管理面临的挑战和发展机遇.文章重点介绍了十大 API 管理发展趋势,包括 API 安全性.API 标准化.云端 API 管理解决方案.低代 ...
- 2023-04-20:有一堆石头,用整数数组 stones 表示 其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎 假设石头的重量分别为 x 和
2023-04-20:有一堆石头,用整数数组 stones 表示 其中 stones[i] 表示第 i 块石头的重量. 每一回合,从中选出任意两块石头,然后将它们一起粉碎 假设石头的重量分别为 x 和 ...
- Mysql Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘xx‘
MySql执行分组sql报错: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated co ...
- vue项目中使用lottie动画
一,安装vue-lottie 1 npm install --save vue-lottie 二,引用vue-lottie 在main.js引入并全局注册组件也可在页面单独引用 1 import lo ...
- Selenium 打包为.exe执行
前言:不依赖环境执行,拓展UI自动化使用的场景 一.项目结构介绍 case:测试用例次存放目录 config:主要存放yaml文件配置 ele:元素的定位以及执行动作 tools:HTMLTestRu ...
- 搭建SpringBoot项目依赖和配置快速篇
maven依赖及一些配置 这里主要是搭建项目常用到的maven依赖以及搭建项目会需要用到的一些配置文件,可能下面这些依赖还不是很全,但是应该会满足日常大部分的需求了 Spring Spring项目的依 ...