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

Python二和蛮力方法

萧越泽
2023-03-14

我是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赋值错误?

共有3个答案

公良莫希
2023-03-14
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]
帅博简
2023-03-14

有点不同的方法。我们将根据需要构建一个值字典,该字典由我们正在寻找的值决定。如果我们查找一个值,我们会在该值首次出现时跟踪其索引。一旦你找到满足问题的值,你就完成了。这上面的时间也是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)
沈弘盛
2023-03-14

强力解决方案是在列表上双嵌套一个循环,其中内部循环只查看大于外部循环当前所在索引的索引。

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代码是迄今为止最快的解决方案排名 非常感谢!