1. Two Sum[E]两数之和

news/2024/7/20 14:48:08 标签: python, c/c++, 内存管理

题目


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]

思路


思路1:双重循环

这种是最容易想到的思路,比较暴躁,复杂度\(O(N^2)\)

思路2:哈希表

题目对数a、b求和,但是返回的是等于target时a、b的下标,于是想到将数组下标与对应值作一个映射表。C++使用unordered_map关联容器可以实现键值与真值的映射。python中使用字典来实现类似功能。

Tips


unordered_map

1. 原型
template <class T,             //键值类型
          class T,                       // 映射类型
          class hash = hash<key>,      //哈希函数对象类型
          class Pred = equal_to <key>,       //相等比较函数对象类型
          class Alloc = allocator < pair<cosnt key, T> >   //alloctor类
          >
2. 特性
  • 关联性:通过key值检索value,而不是通过绝对地址(和顺序容器不同)
  • 无序性:使用hash表存储,内部无序
  • Map:每个值对应一个key值
  • key唯一性:不存在两个元素的key一样
  • 动态内存管理:使用动态内存管理模型来动态管理所需要的内存空间。
3. 常用函数
  • count
    原型
    size_type count (const key_type& k) const;
    说明
    使用给定的Key值计算元素。搜素容器中Key值作为输入参数k的元素,并返回元素的数量。由于unorder_map容器不允许存在重复的Key值,这说明如果容器中存在具有该Key值的元素,则该函数返回1,否则返回0。
4. 小结

unordered_map的数据以pair<const Key, T>保存,first是键值(key value),second是映射值(the mapped value)。赋值语句m[key value] = the mapped value

C++


  • 思路1
 vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> results;
        
        for(int i=0;i<nums.size();i++)
        {
            for(int j=i+1;j<nums.size();j++)
            {
                if(nums[i]+nums[j]==target)
                {
                    results.push_back(i);
                    results.push_back(j);
                    
                    return results;
                }
                else
                {
                    continue;
                }
            }
        }
    }
  • 思路2
vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> m;
        vector<int> results;
        
        //数组中的值作为map的键值,其下标作为对应的映射值
        for(int i=0;i<nums.size();i++)  
        {
            m[nums[i]] =i;
        }
        
        for(int i = 0;i<nums.size();i++)
        {
            int t = target - nums[i];
            if(m.count(t) && m[t] != i) // 不能使用同样的数两次
            {
                results.push_back(i);
                results.push_back(m[t]);
                break;
            }
        }
        return results;
    }

python">Python


  • 思路2
python"> def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
         #建立字典
        table ={nums[i] : i for i in range(len(nums))}
        
        results = []
        for i in range(len(nums)):
            t = target - nums[i]
            if table.get(t) is not None and (table.get(t) != i):
                results = [i, table.get(t)]
                break;
                
        return results
        

转载于:https://www.cnblogs.com/Jessey-Ge/p/10943944.html


http://www.niftyadmin.cn/n/1055170.html

相关文章

如何获得最新的jdk和最新的eclipse

很多新进程序员和新公司都喜欢使用最新的eclipse&#xff0c;而且不断地接受新事物&#xff0c;也会使自己不断地成长&#xff0c;所以我就说说如何获取最新的jdk和最新的eclipse。 上面那段话乱七八糟可以忽略了&#xff0c;因为主要内容并不是上面那一坨。 一、最新版本JDK…

提示“目录或文件损坏且无法读取”的恢复

提示“目录或文件损坏且无法读取”的恢复 2009-11-17 21:38:21标签&#xff1a;目录损坏 恢复 无法读取 分区    [推送到技术圈] 版权声明&#xff1a;原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法…

求第K大数(分治)

题意&#xff1a;已知N个数&#xff0c;求第K大数。 分析&#xff1a; 1、复杂度O(n)。 2、利用快排中划分的原理&#xff0c;每次划分以序列中第一个数x为标准&#xff0c;将序列划分为{比x大的数}x{比x小的数}。 3、若集合{比x大的数}中元素为k-1个&#xff0c;则x为第k大数。…

2MSL导致的服务器端口占用问题

MSL(Maximum Segment Lifetime)是最大报文段生存时间&#xff0c;它代表任何报文段在被丢弃前在网络中被允许存在的最长时间。这个时间是有限制的&#xff0c;因为TCP依赖IP传输数据报&#xff0c;而IP数据报有TTL字段和最大跳数字段&#xff0c;这两个字段限制了IP数据报在网络…

【一】java从头开始学习之两个jdk引发的血案

最近发现java基础很薄弱&#xff0c;一直使用的都是公司的平台&#xff0c;公司的平台很方便&#xff0c;把很多复杂的过程封装起来&#xff0c;想用的时候就可以直接使用&#xff0c;好处就是开发很快&#xff0c;但是缺点就是很多原理性的东西搞不懂&#xff0c;这对当前的开…

牛客 109 C 操作数 (组合数学)

给定长度为n的数组a&#xff0c;定义一次操作为&#xff1a;1. 算出长度为n的数组s&#xff0c;使得si (a[1] a[2] ... a[i]) mod 1,000,000,007&#xff1b;2. 执行a s&#xff1b;现在问k次操作以后a长什么样 记初始序列为$a_0$, $k$次操作后序列为$a_k$, 有 $\begin{equ…

struts中json机制与普通页面跳转机制混用(全局结果集配置返回json)

package继承json-default与struts-default 返回结果是add的话将addResult属性转换为json返回(addResult属性有getter&#xff0c;setter方法)&#xff0c;返回结果是查询是正常的页面跳转。 如果配置中不写param&#xff0c;默认会将所要带get&#xff0c;set的属性转为JSON。 …

程序中间态

大型系统或者很复杂的业务&#xff0c;往往要将一件事分割为简单的几步&#xff0c;下一步依赖上一步的结果&#xff0c;可以将最终处理结果之前的所有结果状态视为中间态。其实&#xff0c;数据库、队列&#xff08;语言内置的队列、kafka、mq等&#xff09;等保存的非最终结果…