我是Python新手,刚刚开始尝试使用LeetCode来构建我的排骨。在这个经典问题上,我的代码遗漏了一个测试用例。
问题如下:
给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。
您可以假设每个输入都有一个精确的解决方案,并且您可以不使用相同的元素两次。
例子:
给定nums=[2,7,11,15],target=9,
因为Nums[0]Nums[1]=2 7=9,返回[0,1]。
我错过了目标数为6的测试用例[3,2,4],它应该返回[1,2]的索引,但击中了目标数为6的测试用例[1,5,7](它当然返回索引[0,1]),因此我的while循环中似乎出了问题,但我不太确定是什么。
class Solution:
def twoSum(self, nums, target):
x = 0
y = len(nums) - 1
while x < y:
if nums[x] + nums[y] == target:
return (x, y)
if nums[x] + nums[y] < target:
x += 1
else:
y -= 1
self.x = x
self.y = y
self.array = array
return None
test_case = Solution()
array = [1, 5, 7]
print(test_case.twoSum(array, 6))
在目标为6的测试用例[3,2,4]上,输出返回null,因此索引1和2甚至没有被汇总,我是否会将y赋值错误?
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
ls=[]
l2=[]
for i in nums:
ls.append(target-i)
for i in range(len(ls)):
if ls[i] in nums :
if i!= nums.index(ls[i]):
l2.append([i,nums.index(ls[i])])
return l2[0]
x= Solution()
x.twoSum([-1,-2,-3,-4,-5],-8)
输出
[2, 4]
有点不同的方法。我们将根据需要构建一个值字典,该字典由我们正在寻找的值决定。如果我们查找一个值,我们会在该值首次出现时跟踪其索引。一旦你找到满足问题的值,你就完成了。这上面的时间也是O(N)
class Solution:
def twoSum(self, nums, target):
look_for = {}
for n,x in enumerate(nums):
try:
return look_for[x], n
except KeyError:
look_for.setdefault(target - x,n)
test_case = Solution()
array = [1, 5, 7]
array2 = [3,2,4]
given_nums=[2,7,11,15]
print(test_case.twoSum(array, 6))
print(test_case.twoSum(array2, 6))
print(test_case.twoSum(given_nums,9))
输出:
(0, 1)
(1, 2)
(0, 1)
强力解决方案是在列表上双嵌套一个循环,其中内部循环只查看大于外部循环当前所在索引的索引。
class Solution:
def twoSum(self, nums, target):
for i, a in enumerate(nums, start=0):
for j, b in enumerate(nums[i+1:], start=0):
if a+b==target:
return [i, j+i+1]
test_case = Solution()
array = [3, 2, 4]
print(test_case.twoSum(array, 6))
array = [1, 5, 7]
print(test_case.twoSum(array, 6))
array = [2, 7, 11, 15]
print(test_case.twoSum(array, 9))
输出:
[1, 2]
[0, 1]
[0, 1]
我试图基于字母替换(没有固定偏移量)解密密码文本。我的目标是找到钥匙。 例如: 这是我的纯文本: 直到现代,密码学几乎只指加密,即将普通信息转换为无法理解的文本的过程 我生成一个随机替换,得到如下结果: 该公司的董事会成员在董事会会议上发言 规则: 纯文本只包含较低的字母a... z 空格不加密 英文文本 我想当我使用英文字母频率时,我可以用最常用的字母链接替换加密文本中最常用的字母:https:
从方法1开始,我一直在研究Leetcode问题的不同算法。如果阵列值是墙的高度,则需要计算总水域面积(列宽=1)。 第一种方法是找出每根立柱左右两侧最大墙高的最小高度,如果立柱高度小于最小值,则向给定立柱顶部加水。取最小值,因为这是收集的水能够达到的最高值。要计算每侧的最大值,需要对左侧和右侧进行n-1次遍历。 我用Python编码,但根据Leetcode上给出的解决方案,这里是C语言代码。 我注
正如你从标题中所看到的,我正在努力对因子为2个素数的大整数进行强制因子分解。我想知道是否有一种方法可以在for循环中使用for循环。我知道这是一种很糟糕的方式,但无论如何我都愿意这样做。(我本来打算使用费马分解定理,但如果没有一些额外的方法/库,你就不能求大整数,我无法做到这一点),所以请尝试一下,看看你是否可以帮助我。大致如下: 显然,这太可怕了,我知道你不能通过说i.nextPossibleP
fn=fn−1+fn−2,其中f1=1和f2=1。因此,前12项将为f1=1,f2=1,f3=2,f4=3,f5=5,f6=8,f7=13,f8=21,f9=34,f10=55,f11=89,f12=144 第12项f12是第一个包含三位数的项。 斐波那契数列中第一个包含1000位数字的项是什么?
对于我的Intro CS类,我们必须创建一个程序,找到一个特定的数字,在本例中是一个地址。地址在1000和9999之间,必须满足以下标准: 所有四位数字都不同 千位数字是十位数字的三倍 这个数字是奇数 数字之和是27 到目前为止,我已经能够生成数字的范围,并缩小奇数,但其余的是相当混乱的。建议?
我一直在ACM提交解决这个问题的程序。问题ID=1922,但我的解决方案在测试3中一直超过时间限制。 我的想法是使用蛮力,但有一些分支-切断。以下是我的Java代码,任何更快的解决方案或改进将不胜感激...我猜这一点也不难,因为难度只有195,但我就是不能让它被接受。 终于被接受了。算法是先给英雄排序,先从愿望最小的开始。只是O(n).. 我的Java代码是迄今为止最快的解决方案排名 非常感谢!