leetcode_1099 小于 K 的两数之和

298 阅读1分钟

要求

给你一个整数数组 nums 和整数 k ,返回最大和 sum ,满足存在 i < j 使得 nums[i] + nums[j] = sum 且 sum < k 。如果没有满足此等式的 i,j 存在,则返回 -1 。

示例 1:

输入:nums = [34,23,1,24,75,33,54,8], k = 60
输出:58
解释:
34 和 24 相加得到 58,58 小于 60,满足题意。

示例 2:

输入:nums = [10,20,30], k = 15
输出:-1
解释:
我们无法找到和小于 15 的两个元素。

核心代码

class Solution:
    def twoSumLessThanK(self, nums: List[int], k: int) -> int:
        if len(nums) < 2:
            return -1
        tmp = []
        for i in range(len(nums)):
            for j in range(i + 1,len(nums)):
                tmp.append(nums[i] + nums[j])
        tmp.sort()
        if tmp[0] > k:
            return -1
        res  = tmp[0]
        for item in tmp:
            if item < k and abs(item - k) < abs(res - k):
                res = item
        return res

image.png

解题思路:我们使用双层循环,第一层循环我们将所有两个数的和计算出来,我们对和进行排序,然后还是找到历史最佳,第二层循环,找到符合条件的比k小的和且,和历史最佳的和进行比较,最终获得最接近k的和。