首页 > 试题广场 >

给定一个整数数组,判断其中是否有3个数和为N

[编程题]给定一个整数数组,判断其中是否有3个数和为N
  • 热度指数:4391 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
给定一个整数数组,判断其中是否有3个数和为N

输入描述:
输入为一行
逗号前为一个整数数组,每个元素间用空格隔开;逗号后为N


输出描述:
输出bool值
True表示存在3个和为N的数
False表示不存在3个和为N的数
示例1

输入

1 2 3 4 5,10

输出

True

备注:
数组长度不超过2000,所以数均为int范围的正整数
class Solution:
    def threeSum(self, nums, target):
        nums.sort()
        res = []
        for k in range(len(nums) - 2):
            if nums[k] > target:
                break  # 因为已经排序,后续不可能有更小的数
            if k > 0 and nums[k] == nums[k - 1]:
                continue  # 跳过重复的基准值
            i, j = k + 1, len(nums) - 1
            while i < j:
                s = nums[k] + nums[i] + nums[j]
                if s < target:
                    i += 1
                    while i < j and nums[i] == nums[i - 1]:
                        i += 1  # 跳过重复的较小数
                elif s > target:
                    j -= 1
                    while i < j and nums[j] == nums[j + 1]:
                        j -= 1  # 跳过重复的较大数
                else:
                    res.append([nums[k], nums[i], nums[j]])
                    i += 1
                    j -= 1
                    while i < j and nums[i] == nums[i - 1]:
                        i += 1  # 跳过重复的较小数
                    while i < j and nums[j] == nums[j + 1]:
                        j -= 1  # 跳过重复的较大数
        return res

if __name__ == '__main__':
    input_line = input().strip()
    array_part, target_part = input_line.split(',')
   
    # 将数组部分转换为整数列表
    nums = list(map(int, array_part.strip().split()))
    # 将目标值转换为整数
    target = int(target_part.strip())
   
    solution = Solution()
    triplets = solution.threeSum(nums, target)
   
    if triplets:
        print(True)
        # print("满足条件的三元组:", triplets)  # 可选输出,方便查看具体组合
    else:
        print(False)
发表于 2025-05-25 15:25:13 回复(0)

热门推荐

通过挑战的用户

查看代码
给定一个整数数组,判断其中是否有3个数和为N