LeetCode -- 1.两数之和(Python)

题目

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解题思路

  • 由于每个下标对应的元素不能重复使用,所以在列表 nums 循环中,先取出下标 i ,再创建由下标 i 之后的元素组成的新列表 ls
  • 然后在列表 ls 循环中,判断 nums[ i ] + ls[ j ] 是否等于目标值 target
  • 等于的话则返回 [i, j+i+1] 。需要注意的是元素 ls[ j ] 在原列表 nums 的下标等于 j+i+1

代码提交

解法1:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            ls = nums[i+1:]
            for j in range(len(ls)):
                if nums[i] + ls[j] == target:
                    return [i, j+i+1]
        return [-1, -1]

执行用时 :5948 ms, 在所有 Python3 提交中击败了18.36%的用户
内存消耗 :14.5 MB, 在所有 Python3 提交中击败了16.41%的用户

解法2:

class Solution(object):
   def twoSum(self, nums, target):
       """
       :type nums: List[int]
       :type target: int
       :rtype: List[int]
       """
       for i, a in enumerate(nums):
           for j, b in enumerate(nums[i + 1 - len(nums):]):
               if a + b == target:
                   return [i, j + i + 1]
       return [-1, -1]

执行用时 :3124 ms, 在所有 Python 提交中击败了30.03%的用户
内存消耗 :13.4 MB, 在所有 Python 提交中击败了6.17%的用户

拓展:python内置函数enumerate()

语法:
enumerate(sequence, [start=0])

参数:

  • sequence — 列表或其他可迭代对象
  • start — 下表起始位

返回值:

返回 enumerate(枚举) 对象。

实例:

list = ['1','5','3','6','8']
for i, num in enumerate(list):
    print([i, num])

输出:

[0, '1']
[1, '5']
[2, '3']
[3, '6']
[4, '8']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值