文章目录
- 刷题前唠嗑
- 题目:数位和相等数对的最大和
- 题目描述
- 代码与解题思路
- 思考解法
- 偷看大佬题解
- 结语
刷题前唠嗑
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
}
一次遍历就搞定了,太妙了,代码很好理解,我就不解释了(才不是我不知道怎么解释呢,哼)
结语
今天没啥想说的