LeetCode #1099. Two Sum Less Than K
题目
解题方法
先排序,然后调用二分查找函数获取比 k 小的第一个数的下标 end,设置 start = 0,当 start < end 时做循环,计算 nums[start] + nums[end] 的值 Sum,判断 Sum 和 k 的关系,如果 Sum >= k 就把 end 减1,否则 start + 1 后更新和的最大值 maxsum。循环结束后返回 maxsum。
时间复杂度:O(nlogn)
空间复杂度:O(1)
代码
class Solution:
def binarySearch(self, nums, left, right, k):
while left <= right:
mid = (left + right) // 2
if nums[mid] == k:
return mid
elif nums[mid] > k:
right = mid - 1
else:
left = mid + 1
return right
def twoSumLessThanK(self, nums: List[int], k: int) -> int:
nums.sort()
start = 0
end = self.binarySearch(nums, start, len(nums) - 1, k)
maxsum = -1
while start < end:
Sum = nums[start] + nums[end]
if Sum >= k:
end -= 1
else:
start += 1
maxsum = max(maxsum, Sum)
return maxsum