美文网首页
LeetCode_Python(1)_两数之和

LeetCode_Python(1)_两数之和

作者: 惑也 | 来源:发表于2018-12-31 21:57 被阅读15次

需求

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

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

解决方案


方法一

  1. 不重复利用同样的元素,即不能自己加自己,同一个元素也不能使用超过1次;
  2. 每次输出只对应一个答案,即只有一对数据符合要求。
  3. 使用Python内置函数enumerate()获取数组元素(value)及对应的索引(key);
  4. 如果target - value 在列表中,且其索引必须大于key,同时key不在target_list中,则将key和值target - value在列表nums中的索引位置,添加到target_list中即可。
  5. 参考代码
def two_sum(nums, target):
    target_list = []
    for key, value in enumerate(nums):
        if (target - value) in nums[key+1:] and key not in target_list:
            target_list.extend([key, key + 1 + nums[key+1:].index(target - value)])
    return target_list

nums = [4, 11, 4, 15, 4]
target = 8
result = two_sum(nums, target)
print(result)
[0, 2]

方法二

  1. 方法二仅对数列遍历一次,通过索引位数加一排除使用重复元素;
  2. 对数列遍历后,将索引和值添加到字典中,同时对字典进行遍历,判断target-num是否在字典中,如果在则可以同时2个元素的索引位置。
  3. 参考代码
def two_sum(num, target):
    d = {}
    for index, dig in enumerate(nums):
        item = target - dig
        for key, value in d.items():
            if value == item:
                return (key, index)
        d[index] = dig

nums = [4, 11, 4, 15, 4]
target = 8
result = two_sum(nums, target)
print(result)
(0, 2)

需求延伸

如果不要求每种输入只会对应一个答案,则结果可能有多对数据,对方法(一)中的target_list,通过列表推导式的方法,成对地输出,参考代码:

def get_target_index(nums, target):
    target_list = []
    for key, value in enumerate(nums):
        if (target - value) in nums[key+1:] and key not in target_list:
            target_list.extend([key, key + 1 + nums[key+1:].index(target - value)])

    result = [target_list[x:x+2] for x in range(0, len(target_list), 2)]
    return result

nums = [2, 6, 4, 11, 4, 15, 4]
target = 8
result = get_target_index(nums, target)
print(result)
[[0, 1], [2, 4]]

相关文章

  • LeetCode_Python(1)_两数之和

    需求 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回...

  • 1、两数之和

    https://leetcode-cn.com/problems/two-sum/[https://leetcod...

  • 1,两数之和

    2019.5.15 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标...

  • 1 两数之和

    文|Seraph 01 | 问题 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目...

  • 1、两数之和

    题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数...

  • 【1】两数之和

    题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并...

  • [LeetCode] 索引

    1. 两数之和

  • leetcode top100

    1.求两数之和(数组无序) 2.求电话号码的字母组合 3.三数之和 4.两数之和(链表)

  • 【LeetCode通关全记录】1. 两数之和

    【LeetCode通关全记录】1. 两数之和 题目地址:1. 两数之和[https://leetcode-cn.c...

  • LeetCode_Python(18)_四数之和

    需求 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a...

网友评论

      本文标题:LeetCode_Python(1)_两数之和

      本文链接:https://www.haomeiwen.com/subject/kszvlqtx.html