【Leetcode周赛--哈希表数对】6164.数位和相等数对的最大和

本文介绍了LeetCode第6164题的解决方案,主要探讨了两种方法:暴力遍历和哈希表优化。暴力方法会因大样例导致超时,而哈希表方法通过存储数位和与对应数值,有效提高了效率,避免了重复计算,实现了找到数位和相等数对的最大和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leetcode 6164.数位和相等数对的最大和

1.问题描述

在这里插入图片描述

2.解决方案

解法一:暴力

暴力遍历所有数对,然后判断每一个数对是否数位和相等,如果相等,更新最大值(有些大的样例,超时了)

class Solution {
    Integer max = Integer.MIN_VALUE;
    public void judge(int a, int b){
        String str1 = Integer.toString(a);
        String str2 = Integer.toString(b);
        Integer sum1 = 0, sum2 = 0;
        for(char c : str1.toCharArray()){
            sum1 += Integer.parseInt(String.valueOf(c));
        }
        for(char c : str2.toCharArray()){
            sum2 += Integer.parseInt(String.valueOf(c));
        }
        if(sum1==sum2) max = Math.max(max, a+b);
    }
    public int maximumSum(int[] nums) {
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                judge(nums[i], nums[j]);
            }
        }
        return Math.max(max, -1);
    }
}

解法二:哈希表

哈希存储 [key:数位和(9),value:数字(18) ],后面有数位和一样的,就去更新最大值,并且把更大的数字留在map里面,方便后面的再出现数位和一样的,能和最大的数字相加,更新最大值。

class Solution {
    public int numSum(int a){
        String str = Integer.toString(a);
        int sum = 0;
        for(char c : str.toCharArray()){
            sum += Integer.parseInt(String.valueOf(c));
        }
        return sum;
    }
    public int maximumSum(int[] nums) {
        int max = Integer.MIN_VALUE;
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int i : nums){
            int key = numSum(i);
            if(!map.containsKey(key)){
                map.put(key, i);
            }else{
                int value = map.get(key);
                max = Math.max(max, value+i);
                if(i>value){
                    map.put(key, i);
                }
            }
        }
        return Math.max(max, -1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值