Skip to content

LeetCode 每日一题笔记

0. 前言

  • 日期:2025.11.23
  • 题目:1262.可被三整除的最大和
  • 难度:中等
  • 标签:数组 贪心 动态规划

1. 题目理解

问题描述
给你一个整数数组 nums,请你找出并返回能被三整除的元素 最大和。

示例

示例 1: 输入:nums = [3,6,5,1,8] 输出:18 解释:选出数字 3, 6, 1 和 8,它们的和是 18(可被 3 整除的最大和)。

示例 2: 输入:nums = [4] 输出:0 解释:4 不能被 3 整除,所以无法选出数字,返回 0。

示例 3: 输入:nums = [1,2,3,4,4] 输出:12 解释:选出数字 1, 3, 4 以及 4,它们的和是 12(可被 3 整除的最大和)。

2. 解题思路

核心观察

算法步骤

3. 代码实现

java
class lc3600_lc3699.lc3660.Solution {
    public int maxSumDivThree(int[] nums) {
        Arrays.sort(nums);
        int max=0;
        int m1[]=new int[nums.length];
        int m2[]=new int[nums.length];
        for(int i=0;i<m1.length;i++){
            m1[i]=m2[i]=Integer.MAX_VALUE;
        }
        int pos1=0;
        int pos2=0;
        for(int i: nums){
            max+=i;
            if(i%3==1){
                m1[pos1]=i;
                pos1++;
            }
            if(i%3==2){
                m2[pos2]=i;
                pos2++;
            }
        }
        if(max%3==2){
            if(pos1>1&&m1[0]+m1[1]<m2[0]){
                return max-m1[0]-m1[1];
            }
            System.out.println("f");
            return max-m2[0];
        }
        else if(max%3==1){
            if(pos2>1&&m2[0]+m2[1]<m1[0]){
                return max-m2[0]-m2[1];
            }
            return max-m1[0];
        }
        else return max;
    }
}

4. 代码优化说明

5. 复杂度分析

6. 总结

Powered by VitePress 1.6.4 | 持续更新中