Leetcode-1 两数之和

题目描述

给定一个整数数组 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]

思路分析

新手小白,经验不多,对于这种简单题,能暴力解决就暴力解决,所以这里使用的是暴力法解题。
使用for循环,对nums数组进行遍历,第一层循环,找第一个数字,第二层循环,找第二个数字,找出符合要求的数字,获取其下标,保存到一个新数组中,最后直接返回该数组。

通过代码(python)

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        indexs=[]
        for i in range(0,len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i]+nums[j]==target:
                    indexs.append(i)
                    indexs.append(j)
        return indexs

注意:避免重复循环导致重复获取下标,出现返回的结果为[0,1,1,0],第二层循环应从第一层循环中的i下一个i+1开始循环(题目中有提到数组中同一个元素在答案里不能重复出现),即第二层循环条件为(i+1,len(nums),而不是(0,len(nums)

若第二层循环条件为(0,len(nums)
eg: nums=[2,7,11,15]
从第一个数字开始循环出现的情况:2+2,2+7,2+11,2+15
从第二个数字开始循环出现的情况:7+2,7+7,7+11,7+15
出现了数字重复:2+2,7+7
出现了组合重复:2+7,7+2
第一种重复不符合题目要求,第二种重复不符合输出要求。

相关结果

暴力解法通过用时与内存消耗

错误代码及分析

#错误代码1
class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        indexs=[0,0]
        for x in nums:
            for y in nums:
                if x+y==target:
                    indexs[1]=nums.index(x)
                    indexs[0]=nums.index(y)
        return indexs

分析:
1.初始化返回数组indexs=[0,0],数组中的0会对输出结果有影响。
2.元素添加方法使用indexs[0]=nums.index(y),如果不初始化数组元素,会出现报错。

#错误代码2
class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        indexs=[]
        for x in nums:
            for y in nums:
                if x+y==target:
                    indexs.append(nums.index(x))
                    indexs.append(nums.index(y))
        return indexs

分析:
循环语句for y in nums:会导致重复的结果出现。

用到的知识点

1.一维数组初始化
固定长度 :lst1=[0,0,0],lst=[0]*3
不固定长度:lst=[]
2.元素添加
法一:append()方法添加元素:lst.append(obj),添加的元素在数组末尾。
法二:extend()方法添加元素:lst.extend(obj),添加的元素在数组末尾。
法三:两个数组相加,第二个数组的元素在第一个数组元素的末尾。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值