01Leetcode-TwoSum

博客围绕在数组中查找两数相加等于目标值并返回其索引的问题展开。介绍了暴力搜索和哈希搜索两种方法,给出了Python利用字典、C++用map实现的代码思路,还提及了单对和多对结果的不同实现及参考链接。

题目描述:

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. 
Example: 
Given nums = [2, 7, 11, 15], target = 9, 
Because nums[0] + nums[1] = 2 + 7 = 9, 
return [0, 1]. 

题意:给定目标值,在数组中查找到两数满足两数相加等于目标值,返回两数索引,此题已经说明每个目标值都只有唯一一组数符合 
时间复杂度:                   暴力搜索:O(n^2) 
                             采用哈希搜索法:O(n) 
python可利用字典,建立的索引为key-value:数值-索引 

python版---字典---适用于匹配一对


    def  twoSum(nums, target):
        dict = {}
        for index_i,value_i in enumerate(nums):
            value_j = target - value_i
            if value_j not in dict:
                   dict[value_i] = index_i
            else:
                 index_j = dict[value_j]
                 return [index_i, index_j]

        return []

# 字典中的key < == > 列表、元组、字符串 中的[下标、索引]

python版---字典---适合多对匹配

思路:用字典与遍历列表nums的所有值,并依次将遍历的每个值与已经遍历且没有匹配的值进行匹配

         dict用来记录已遍历且没有匹配的值;indexList记录已匹配的下标    

def twoSum(nums, target):

    indexList = []
    dict = {}

    for index_i, value_i in enumerate(nums):
         value_j = target - value_i
         if value_j not in dict:
             dict[value_i] = index_i
         else:
             index_j = dict[value_j]
             indexList.append([index_i, index_j])
    return listList

 

 

C++版---map

用map实现,建立元素与下标的映射! 找到和为target的元素,返回下标

vector <int> twoSum(vector<int> nums, int target)
{
    vector<int> res;
    map<int, int> m;
    for(int i=0; i< nums.size(); i++)
    {
        if(m.find(target - num[i]!=m.end())
            {
                res.push_back(m[target-nums[i]]);
                res.push_back(i);
            }
            m[nums[i]] = i;
    }
    return res;
}

 

reference :

python: https://blog.youkuaiyun.com/qq_28119401/article/details/52972461

以上原理和code 均输出单对结果(适用于 有序  一对结果)

以下reference输出多对结果(如果存在多对  无序)

blog.youkuaiyun.com/qq_34175893/article/details/79635054

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值