文章目录
- 刷题前唠嗑
- 题目:数位和相等数对的最大和
- 题目描述
- 代码与解题思路
- 思考解法
- 偷看大佬题解
- 结语
 
刷题前唠嗑

 LeetCode? 启动!!!
本月已经过半了,每日一题的全勤近在咫尺~
题目:数位和相等数对的最大和
题目链接:2342. 数位和相等数对的最大和
 
题目描述

代码与解题思路
看到这道题目,你难道能忍的住吗?我已经手痒难耐了,暴力?启动!
func maximumSum(nums []int) int {
    if len(nums) < 2 {
        return -1
    }
    ans := -1
    for right := 1 ; right < len(nums); right++ {
        for left := 0 ;left < right; left++ {
            if isSame(nums, left, right) {
                ans = max(ans, nums[left]+nums[right])
            }
        }
    }
    return ans
}
func isSame(nums []int, left, right int) bool {
    l, r := nums[left], nums[right]
    suml, sumr := 0, 0
    for l > 0 {
        suml += l%10
        l /= 10
    }
    for r > 0 {
        sumr += r%10
        r /= 10
    }
    if suml == sumr {
        return true
    }
    return false
}
。。。标准结局,熟悉的感觉

思考解法
可以用哈希的思想来做,这个月做了不少类似的题目,因为他的数大小范围是10 的九次方,也就是最多只有 81 中数位,我们可以用哈希映射,遍历一遍整个数组,将每对数位的最大值求出来
然后再求出他们之间的最大值即可,其实这算是暴力解法啦
偷看大佬题解
func maximumSum(nums []int) int {
    val, ans := make([]int, 100), -1
    for _, v := range nums {
        t, cur := v, 0
        for t > 0 {
            cur += t%10
            t /= 10
        }
        if val[cur] != 0 {
            ans = max(ans, val[cur]+v)
        }
        val[cur] = max(val[cur], v)
    }
    return ans
}
一次遍历就搞定了,太妙了,代码很好理解,我就不解释了(才不是我不知道怎么解释呢,哼)
结语
今天没啥想说的













![[C/C++]数据结构 栈和队列()](https://img-blog.csdnimg.cn/3bdc76488476481ca9ae0838209053a9.png)





