首页 > 其他分享 >每日一题力扣 1262 https://leetcode.cn/problems/greatest-sum-divisible-by-three/

每日一题力扣 1262 https://leetcode.cn/problems/greatest-sum-divisible-by-three/

时间:2023-06-20 14:46:48浏览次数:55  
标签:cn nums divisible 1262 sum a1 int max dp


 

题解

这道题目核心就算是要知道如果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];


}
 

 

标签:cn,nums,divisible,1262,sum,a1,int,max,dp
From: https://www.cnblogs.com/gulilearn/p/17493583.html

相关文章

  • CNC脱机源代码 USB雕刻机CNC 3联动 步进电机控制器CNC脱机源代码 STM32F407 USB雕刻机
    CNC脱机源代码USB雕刻机CNC3联动步进电机控制器CNC脱机源代码STM32F407USB雕刻机CNC3轴联动梯形加减速带插补G代码解释雕刻机插补学习代码,可以通过自己的定义改动。可以直接工业使用。CNC脱机源代码是一种用于控制USB雕刻机的程序,它可以通过控制步进电机实现CNC(Computer......
  • wgcna这是啥
    WGCNA(WeightedGeneCo-ExpressionNetworkAnalysis)加权基因共表达网络分析Gene:基因Genome:基因组 思想:将基因表达数据转化为基因共表达网络,其中每个基因是网络中的一个节点,而基因之间的共表达关系则用边连接。WGCNA根据基因之间的共表达模式将基因划分为不同的模块,每个模......
  • 背包DP-贪心-1262. 可被三整除的最大和
    1262.可被三整除的最大和DescriptionDifficulty:1762RelatedTopics:贪心,数组,动态规划,排序给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。示例1:输入:nums=[3,6,5,1,8]输出:18解释:选出数字3,6,1和8,它们的和是18(可被3整除的最大和)。示......
  • BUUCTF:[CISCN2019 华东南赛区]Web11
    注意到了banner中信息说是smarty,并且将XFF输出到页面直接尝试Smarty模板注入{$smarty.version}Smarty3官方手册:https://www.smarty.net/docs/zh_CN/language.function.if.tpl{ifsystem('ls-lha/')}{/if}{ifsystem('cat/flag')}{/if}......
  • BUUCTF:[CISCN2019 华东南赛区]Double Secret
    BUUCTF:[CISCN2019华东南赛区]DoubleSecret查看robots.txt无可用信息线索在目录:http://274c1aad-138b-4fe6-9815-8feeaf028127.node3.buuoj.cn/secret尝试传参?secret=发现当字符串长度超过4位的时候,出现报错寻找关键代码这里调用了rc4再通过render_template_string执行,SST......
  • fcntl文件枷锁模块
    fcntl模块本模块基于文件描述符来进行文件控制和I/O控制。它是Unix系统调用fcntl()和ioctl()的接口。关于这些调用的完整描述,请参阅Unix手册的fcntl(2)和ioctl(2)页面。flock介绍fcntl.flock(f,operation)f:文件描述符operation:操作fcntl.LOCK_UN......
  • 1262. 可被三整除的最大和
    给你一个整数数组 nums,请你找出并返回能被三整除的元素最大和。来源:力扣(LeetCode)链接:https://leetcode.cn/problems/greatest-sum-divisible-by-three著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。classSolution{publicintmaxSumDivThree(in......
  • 2023CISCN部分wp
    remov不想写了ezbytedwarf字节码执行直接readelf-Wwf读取字节码得到最后让r12返回值为0即四个表达式分别成立所以importreprint(hex((0^1237891274917891239^2616514329260088143)-1892739))print(hex((0^1209847170981118947^8502251781212277489)-8971237))print......
  • 三大特征提取器(RNN/CNN/Transformer)
    三大特征提取器-RNN、CNN和Transformer#简介#近年来,深度学习在各个NLP任务中都取得了SOTA结果。这一节,我们先了解一下现阶段在自然语言处理领域最常用的特征抽取结构。本文部分参考张俊林老师的文章《放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较......
  • cn小系统
    一级导航二级导航列表storeId/categories/list(门店-分类-列表)store#1id=1storeId、categoriesId、fieldExt(month、type)(返回这几个字段、点击列表都要传2个字段给接口)id=2id=3store#2store#3store#4store#5type:check、cash、billcategories:列表id对应固定分类id=1:p......