Leetcode 【2342. 数位和相等数对的最大和】

给你一个下标从 0 开始的数组 nums ,数组中的元素都是 整数。请你选出两个下标 iji != j),且 nums[i] 的数位和 与 nums[j] 的数位和相等。

请你找出所有满足条件的下标 ij ,找出并返回nums[i] + nums[j]可以得到的 最大值

示例 1:

复制代码
输入:nums = [18,43,36,13,7]
输出:54
解释:满足条件的数对 (i, j) 为:
- (0, 2) ,两个数字的数位和都是 9 ,相加得到 18 + 36 = 54 。
- (1, 4) ,两个数字的数位和都是 7 ,相加得到 43 + 7 = 50 。
所以可以获得的最大和是 54 。

示例 2:

复制代码
输入:nums = [10,12,19,14]
输出:-1
解释:不存在满足条件的数对,返回 -1 。

提示:

  • 1 <= nums.length <=
  • 1 <= nums[i] <=

方法:哈希表

看到这么恐怖的数量级,第一想法肯定是暴力行不通,那么就来试试哈希表

首先将数组nums中每个元素的数位和保存在一个新数组中:

python 复制代码
for i in nums:
            str_i = str(i)
            res = 0
            for digit in str_i:
                res += int(digit)
            sum_num.append(res)

这段代码的时间复杂度是O(n)

然后创建字典,key值为当前数位和,当字典中不存在该key值时,dickey为nums中的当前元素值,如果字典中存在key值,那么将新的nums元素值append到字典中:

python 复制代码
for i in range(n):
            key = sum_num[i]
            if key not in dic:
                dic[key] = [nums[i]]
            else:
                dic[key].append(nums[i])

最后遍历字典,找出key值对应的value有两个及以上,并且按照降序排列,找出最大和即可:

python 复制代码
for key, numbers in dic.items():
            if len(numbers) >= 2:
                numbers.sort(reverse=True)
                pair_sum = numbers[0] + numbers[1]
                ans = max(ans, pair_sum)

完整代码:

python 复制代码
class Solution:
    def maximumSum(self, nums: List[int]) -> int:
        sum_num = []
        dic={}
        n=len(nums)
        ans=-1
        for i in nums:
            str_i = str(i)
            res = 0
            for digit in str_i:
                res += int(digit)
            sum_num.append(res)

        for i in range(n):
            key = sum_num[i]
            if key not in dic:
                dic[key] = [nums[i]]
            else:
                dic[key].append(nums[i])

        for key, numbers in dic.items():
            if len(numbers) >= 2:
                numbers.sort(reverse=True)
                pair_sum = numbers[0] + numbers[1]
                ans = max(ans, pair_sum)

        return ans

最后,看了灵佬的题解再次震撼我心,附上灵佬题解链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

相关推荐
Navigator_Z1 小时前
LeetCode //C - 1203. Sort Items by Groups Respecting Dependencies
c语言·算法·leetcode
临床数据科学和人工智能兴趣组1 小时前
R语言中,列表是一种非常灵活的数据结构,它可以存储不同类型的对象,如向量、矩阵、数据框、甚至其他列表
数据结构·数据库·r语言·r语言-4.2.1·临床试验
我变成萤火虫1 小时前
2026 ICPC沈阳邀请赛Vp补题
数据结构·c++·算法·贪心算法·stl·排序算法·动态规划
神威难绷泪1 小时前
数据结构:二叉树
数据结构·二叉树
风起洛阳@不良使2 小时前
中级软考(软件攻城狮)第3章知识点——数据结构与数据运算(线性结构+非线性结构)
数据结构·算法·链表
AndrewHZ2 小时前
图像处理入门009 | OpenCV 图像读取与显示:imread/imshow 全解析
图像处理·python·opencv·算法·计算机视觉·图像显示
学计算机的计算基2 小时前
TCP 传输层硬核整理:三次握手、四次挥手、拥塞控制一次讲透
java·网络·笔记·网络协议·算法
索西引擎2 小时前
【数据结构】B树与B+树:结构性质、对比分析与磁盘优化机理
数据结构·b树
xx~t2 小时前
嵌入式学习22
数据结构·学习·算法·排序算法