zoukankan      html  css  js  c++  java
  • 1262. Greatest Sum Divisible by Three

    Given an array nums of integers, we need to find the maximum possible sum of elements of the array such that it is divisible by three.

    Example 1:

    Input: nums = [3,6,5,1,8]
    Output: 18
    Explanation: Pick numbers 3, 6, 1 and 8 their sum is 18 (maximum sum divisible by 3).

    Example 2:

    Input: nums = [4]
    Output: 0
    Explanation: Since 4 is not divisible by 3, do not pick any number.
    

    Example 3:

    Input: nums = [1,2,3,4,4]
    Output: 12
    Explanation: Pick numbers 1, 3, 4 and 4 their sum is 12 (maximum sum divisible by 3).
    

    Constraints:

    • 1 <= nums.length <= 4 * 10^4
    • 1 <= nums[i] <= 10^4
    class Solution {
        public int maxSumDivThree(int[] nums) {
            int res = 0, leftOne = 20000, leftTwo = 20000;
            for(int n:nums){
                res+=n;
                if(n%3==1){
                    leftTwo = Math.min(leftTwo,leftOne+n);
                    leftOne = Math.min(leftOne,n);
                }
                if(n%3==2) {
                    leftOne = Math.min(leftOne,leftTwo+n);
                    leftTwo = Math.min(leftTwo,n);
                }
            }
            if(res%3==0) return res;
            if(res%3==1) return res-leftOne;
            return res - leftTwo;
            
        }
    }

    https://leetcode.com/problems/greatest-sum-divisible-by-three/discuss/431108/Java-O(N)-solution-Simple-Math-O(1)-space

    牛逼的方法,持续追踪除3余1和余2最小的数,最后总和整除就返回,余1就减去余1最小的数,余2同理。

    注意无论余1还是余2都要持续更新另外一个,因为可能出现[2, 6, 2, 2, 7]这种情况,此时如果只追踪1或2,答案会是12而非15,因为2+2%3是1,7%3也是1,减的是7.

    所以每次要更新两者。

  • 相关阅读:
    ApplicationContext.xml修改
    springmvc.xml约束
    log4j.properties
    SqlMapConfig.xml配置文件
    Mybatis注解式开发坐标
    字符串函数
    vim基础快捷键
    format的使用
    lambda匿名函数
    字典的基础使用
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/11939787.html
Copyright © 2011-2022 走看看