signed

QiShunwang

“诚信为本、客户至上”

力扣第一题,两数之和解法

2021/6/9 8:41:44   来源:

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

 

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

 

提示:

    2 <= nums.length <= 104
    -109 <= nums[i] <= 109
    -109 <= target <= 109
    只会存在一个有效答案

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

 

 

### 解题思路

先说一下解题的思路,我是看了一下解答视频的,然后把他的代码拷过来但是看懂总是很难

索性听了一下思路,自己做了一下,再结合讲解去做

解题思路是:首先他会让你给你一个列表,在给一个数,从这这个列表中找出两个数+起来等于你给的第二个数

那怎么解决,无非是这样,先把列表的第一个数去加第二个数,判断一下等于吗?不等于再第一个数加上第三个数

听这个思路就要用到双重for循环,外循环执行一次,内循环执行多次

解决思路:首先第一个数要循环次数对不对,循环多少次?是不是你给的列表有多长,我就循环多少次

long = len(nums),就是将nums的长度给long

range就是你传个几就会执行几次

现在外循环解决了,剩下的就是内循环

比如我传入了5个数,分别是 1,3,5,6,7

那第一次循环是不是得1+3,1+5,1+6,1+7

第二次,3+5,3+6,3+7

每一次循环比上一次少一次

所以呢,就采用a+1的方式,他的循环次数是long,也就是6

每次再判断是不是相等的,nums[a]就是拿到当前索引的值

最终再返回索引!!!!

以上为我自己理解到的思路,总体来说有些肯定不细节,但这也是我作为python小白能理解得了

有什么误导概不负责哈,有什么缺点欢迎大家指正

 

class Solution:

    def twoSum(self, nums: List[int], target: int) -> List[int]:

        long = len(nums)

        for a in range(long):

            for b in range(a + 1, long):

                if nums[a] + nums[b] == target:

                    return (a, b)

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。