文章目录
- 刷题前唠嗑
- 题目:数位和相等数对的最大和
- 题目描述
- 代码与解题思路
- 思考解法
- 偷看大佬题解
- 结语
刷题前唠嗑
LeetCode? 启动!!!
本月已经过半了,每日一题的全勤近在咫尺~
题目:数位和相等数对的最大和
题目链接:2342. 数位和相等数对的最大和
题目描述
代码与解题思路
看到这道题目,你难道能忍的住吗?我已经手痒难耐了,暴力?启动!
func maximumSum(nums []int) int {if len(nums) < 2 {return -1}ans := -1for 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, 0for l > 0 {suml += l%10l /= 10}for r > 0 {sumr += r%10r /= 10}if suml == sumr {return true}return false
}
。。。标准结局,熟悉的感觉
思考解法
可以用哈希的思想来做,这个月做了不少类似的题目,因为他的数大小范围是10 的九次方,也就是最多只有 81 中数位,我们可以用哈希映射,遍历一遍整个数组,将每对数位的最大值求出来
然后再求出他们之间的最大值即可,其实这算是暴力解法啦
偷看大佬题解
func maximumSum(nums []int) int {val, ans := make([]int, 100), -1for _, v := range nums {t, cur := v, 0for t > 0 {cur += t%10t /= 10}if val[cur] != 0 {ans = max(ans, val[cur]+v)}val[cur] = max(val[cur], v)}return ans
}
一次遍历就搞定了,太妙了,代码很好理解,我就不解释了(才不是我不知道怎么解释呢,哼)
结语
今天没啥想说的