【leetcode】两数之和(C、Python解答)

题目:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

C解答:
简单粗暴的双层循环:

int* twoSum(int* nums, int numsSize, int target) {
    static int a[2];
    int i,j;
    for(i=0;i<numsSize;i++)
    {
        for(j=i+1;j<numsSize;j++)
        {
            if(nums[i]+nums[j]==target)
            {
                a[0]=i;
                a[1]=j;
            }
        }
    }
    return a;
}

Python解答:
方法1:简单粗暴的双层循环,这是最容易想到的方法,但是无法通过时间复杂度检验。此处略。

方法2:算出target-nums[i],再查算出的该值是否存在于nums中,存在:查索引;不存在:下一个。此方法的时间复杂度明显低于方法一。

代码:

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        answer=[]
        for i in range(0,len(nums)):
            a=target-nums[i]
            if a in nums:
                j=nums.index(a)
                if i==j:
                    continue
                else:
                    answer.append(i)
                    answer.append(j)
                    break
        return answer

方法3:百度之后发现了一个更优解,创建一个字典,通过循环把 target - nums[x]作为键,x作为值存入字典,边存边检查当前正在处理的nums[x]是否存在于字典中,存在:返回字典中nums[x]的值,和当前正在使用的x的值。
此方法的时间复杂度优于方法2。

代码:

class Solution:
    def twoSum(self,nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        n = len(nums)
        d = {}
        for x in range(n):
            a = target - nums[x]
            if nums[x] in d:
                return d[nums[x]],x
            else:
                d[a] = x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值