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