[算法] LeetCode 1.两数之和

LeetCode 1.两数之和(python)

1、朴素解法

最朴素的两个for循环大法:

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

但注意,不要用enumerate函数写,会超时:

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        size = len(nums)
        for i, m in enumerate(nums):
            j = i+1
            while j < size :
                if nums[i] + nums[j] == target:
                    return [i, j]
                else:
                    j+=1

2、用 in 优化(一遍for循环?)

python大法好:用in方法,只需要一个for循环就能解决问题了(但其实是python的in帮我们做了一个查找的循环)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            if target-nums[i] in nums:
                if i != nums.index(target-nums[i]):
                    return [i, nums.index(target-nums[i])]

3、用python字典(哈希表的算法思想)

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        d = {}
        for i in range(len(nums)):
            a = target - nums[i]
            if nums[i] in d:
                return d[nums[i]],i
            else:
                d[a] = i

自己想想写写就明白了,字典d里键值对 {k:v}的含义是,与k能凑成target的值在nums中的位置为v。(即nums[i]=k时,nums[v]+num[i]=target。)
边在字典中记下互补这个位置(value)所需互补数(key)边遍历nums数组,之后的遇到nums[i]=之前记录的某个互补数时就是找到了,返回他的位置(value)和 i 就完成了。

原文地址:https://www.cnblogs.com/importGPX/p/11263450.html

时间: 2024-08-01 20:43:07

[算法] LeetCode 1.两数之和的相关文章

前端与算法 leetcode 1. 两数之和

目录 # 前端与算法 leetcode 1. 两数之和 题目描述 概要 提示 解析 解法一:暴力法 解法二:HashMap法 算法 传入[2,7,11,1,12,34,4,15],19的运行结果 执行结果 GitHub仓库 # 前端与算法 leetcode 1. 两数之和 题目描述 给定一个整数数组 nums?和一个目标值 target,请你在该数组中找出和为目标值的那?两个?整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给

关于leetcode上两数之和的思考

今天在leetcode上完成这道题目时: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 初步代码为 1 class Solution { 2 public int[] t

算法练习:两数之和

题目:给定一个整型数组,是否能找出两个数使其和为指定的某个值?注:整型数组中不存在相同的数. 一.解题方法 1.暴力破解法(时间复杂度O(n^2) ) 这是最容易想到的一种方法,即使用两层循环,从数组里取出一个数,然后在此数之后部分找出另外一个数,计算两数之和,判断是否等于指定值.如下: //直观的办法,使用两个循环 bool IsExistSumOfTwoNum( int nArray[], int nCount, int nSum ) { bool bRet = false; for ( i

【LeetCode】 两数之和 twoSum

两数之和 (简单) 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数: 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 例如: 给定 nums = [2,7,11,15] ,target = 9 因为 nums[0] + nums[1] = 9: 因此返回 [0,1]: v1.0代码如下: 正数.0或重复值通过测试: 异常用例: [-1, -2, -3, -4, -5] -8; 输出 [] /** * @param {number[]} nums * @par

leetCode:twoSum 两数之和 【JAVA实现】

LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:twoSum 两数之和 [JAVA实现] 方法一 使用双重循环两两相加判断是否等于目标值 public List<String> twoSum2(int[] arr, int sum) { if (arr == null || arr.length == 0) { return new ArrayL

LeetCode——1.两数之和

LeetCode的第一题:两数之和,给定一个整数数组nums和一个目标值target,要求在数组中找出和为目标值的两个整数,并返回它们的下标值. 代码如下: 1 var nums = [2, 7, 11, 15] 2 var target = 9 3 4 var twoSum = function (nums, target) { 5 for (let i = 0; i < nums.length; i++) { 6 for (let j = i; j < nums.length; j++)

leetcode T1 两数之和详解

两数之和 题目描述 给定一个整数数组 nums?和一个目标值 target,请你在该数组中找出和为目标值的那?两个?整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例 给定 nums = [2, 7, 11, 15], target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1] 详细题解 暴力枚举 暴力法的思路很简单:遍历数组nums的每一个元素nums[i],在[i+1, ...,

Python版[leetcode]1. 两数之和(难度简单)

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 一开始我的想法是直接用2个for循环遍历nums,用当前数和当前数之后的所有数求和,如果和target相同就直接返回当前索引

LeetCode 1.两数之和

题目描述: 给定一个整数数列,找出其中和为特定值的那两个数. 你可以假设每个输入都只会有一种答案,同样的元素不能被重用. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 先Po代码: /** * @param {number[]} nums * @param {number} target * @return {number[]} */ var twoSum = funct