当前位置: 首页 > 知识库问答 >
问题:

找出小于给定数的三胞胎

齐乐
2023-03-14

给定一个由n个整数组成的数组nums和一个目标,求出满足nums[i]+nums[j]+nums[k]

例如,给定nums=[-2,0,1,3],target=2。

返回2。因为有两个和小于2的三胞胎:

    def threeSumSmaller(nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """

        nums = sorted(nums) 
        smaller = 0

        for i in range(len(nums)):

            # Create temp array excluding a number

            if i!=len(nums)-1:
                temp = nums[:i] + nums[i+1:]

            else:
                temp = nums[:len(nums)-1]


            # Sort the temp array and set new target to target - the excluded number

            l, r = 0, len(temp) -1 
            t = target - nums[i]

            while(l<r):

                if temp[l] + temp[r] >= t:

                    r = r - 1

                else:

                    smaller += 1

                    l = l + 1


        return smaller
Input:
[1,1,-2]
1
Output:
3
Expected:
1

共有1个答案

田念
2023-03-14

已经有了很好的答案,除此之外,如果你想检查你的算法结果,那么你可以利用这个内置的功能:

import itertools

def find_(vector_,target):
    result=[]
    for i in itertools.combinations(vector_, r=3):
        if sum(i)<target:
            result.append(i)
    return result

产出:

print(find_([-2, 0, 1, 3],2)) 

产出:

[(-2, 0, 1), (-2, 0, 3)]
print(len(find_([-2, 0, 1, 3],2)))
2
 类似资料:
  • 打印出小于给定数N的素数。对于奖励积分,您的解决方案应该在时间或更好的时间内运行。你可以假设N总是一个正整数。 输入样本: 程序应该接受文件名的路径作为其第一个参数。该文件中的每一行都是一个测试用例。每个测试用例将包含一个整数

  • 我的问题很简单,但我不知道如何解决我想要的。我必须找到小于给定数字的最大数素数,如果不存在则打印消息。 代码是有效的,如果数字是10,它会打印7,但我想做2个新的修改,我找不到解决方案。例如,如果给定的数字是1,我的程序应该如何修改以打印消息?我试着写一个if-else,但是如果我用if修改了while,这将不会有帮助。第二件事,如果给定的数是素数,代码仍然会找到比给定数少的数。如果我给数字7,输

  • 我试图解决下面提供的Codness中的一个问题, 编写一个函数: 给定一个由N个整数组成的数组A,返回A中不出现的最小正整数(大于0)。 例如,给定A=[1,3,6,4,1,2],函数应该返回5。 假定: N是范围[1...100,000]内的整数;数组A的每个元素都是范围[−1,000,000..1,000,000]内的整数。 预期最坏情况时间复杂度为O(N);预计最坏情况下的空间复杂度为O(N

  • 如何找到所有的数字,这些数字小于给定的no,并且这些数字的设置比特数小于给定的no,但无论什么no。举一个例子,假设给定的no是13(二进制中的1101),那么所有生成的no将是12(二进制中的1100),9(二进制中的1001),8(二进制中的1000),5(二进制中的0101),4(二进制中的0100),1(二进制中的0001)。可见,在1100中(设置位位置为2和3,如在给定的1101号中)

  • 我只能想到一个朴素的算法,它列出集合的所有子集,并检查子集的和是否和是否最小,但它是一个指数算法,列出所有子集需要O(2^n)。我能用动态规划在多项式时间内求解吗?

  • 我有一个大小为的整数值数组和一个给定的。 我想找到子序列的总数,使得每个子序列的元素总和小于。例如:设 ,,数组的元素为 ,则其总子序列为 作为- 但是,所需的子序列是: 也就是说,不被取,因为它的元素和是,这大于,即