给定一个由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
已经有了很好的答案,除此之外,如果你想检查你的算法结果,那么你可以利用这个内置的功能:
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)。我能用动态规划在多项式时间内求解吗?
我有一个大小为的整数值数组和一个给定的。 我想找到子序列的总数,使得每个子序列的元素总和小于。例如:设 ,,数组的元素为 ,则其总子序列为 作为- 但是,所需的子序列是: 也就是说,不被取,因为它的元素和是,这大于,即