Leetcode 1. Two Sum

Leetcode 1. Two Sum

@(LeetCode题目分析)

基于Python3

题目描述

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:
Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].

代码

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        # 18/19 cases passed, not the most complicated one
        # num = len(nums)
        # for i in range(num):
            # for j in range(i+1,num):
                # if nums[i] + nums[j] == target :
                    # return [i,j]
        map = {}
        for i in range(len(nums)):
            if map.__contains__(target - nums[i]): # 将值定为key,可以使用此函数快速检验是否包含,python2是用has_key
                return [map[target - nums[i]],i]
            map[nums[i]] = i

第一种写法是双重for循环遍历,有一个数组很大的样例时间复杂度上无法通过。

主要分析第二种写法,简单且快速,利用的是Python内建的字典数据结构:

首先建立一个空的字典。

思想是在遍历时填充这个字典。

判断是否包含target - nums[i]这个键时,假定的是nums[i]是一个key,这样如果条件满足,就直接得到结果。且这个写法下,不存在用两个相同下标的元素作为加数的情况,因为检查的是target - nums[i],而每次加入的键值对是nums[i],i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值