LeetCode #1099. Two Sum Less Than K

题目

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
posted @ 2020-12-01 13:11  老鼠司令  阅读(128)  评论(0编辑  收藏  举报