1. Two Sum

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:暴力的一种方法,将nums的所有两个数字都尝试一遍
两个for循环,时间复杂度为O(n^2),空间复杂度为O(1). 需要复习的知识:vector的使用:
定义一个vector类: vector<int> result;
定义一个返回vector的函数: vector<int> twoSum(vector<int>& nums,int target)
以及vector类中包含的数据的个数: nums.size() 记得括号不能丢
vector在尾部再加入一个数据: result.push_back(i); 代码部分:
class Solution{
public:
    vector<int> twoSum(vector<int>& nums,int target)
    {
      vector<int> result;
      for(int i=0;i<nums.size();i++)//nums.size()一定记得要带括号哦
      {
        for(int j=i+1;j<nums.size();j++)//important to be i+1 not i
        {
          if(nums[i]+nums[j]==target)
          {
            result.push_back(i);
            result.push_back(j);
            return result;
          }
        }
      }
    }
};
思路2:使用哈希表的解法
其实刚刚的思路可以转换为,我们选择了一个数字以后,下一个选择的数字就必须是target减去这个数字。
刚刚的思路其实就是通过再次的遍历来寻找这个数字。而这个寻找的过程可以简化。
简化的方式就是使用哈希表(让在数组的每个元素对应一个key然后就可以查询)。
通过使用这一次哈希就一下子让再次寻找的时间复杂度从O(n)降到了O(1)。(当然,这是在哈希表没有发生冲突的情况下)
而我们可以设计这样一个O(1)的哈希表。 需要复习的知识:
需要准备的知识主要就是怎么创建一个比较合适的哈希表,网上使用比较多的就是unordered_map
用法:
[查找元素是否存在]
    若有unordered_map<int, int> mp;查找x是否在map中
    方法1:  若存在  mp.find(x)!=mp.end()
    方法2:  若存在  mp.count(x)!=0
[插入数据]
    map.insert(Map::value_type(1,"Raoul"));
[遍历map]
    unordered_map<key,T>::iterator it;
    (*it).first;        //the key value
    (*it).second   //the mapped value
    for(unordered_map<key,T>::iterator iter=mp.begin();iter!=mp.end();iter++)
          cout<<"key value is"<<iter->first<<" the mapped value is "<< iter->second; 代码部分:
class Solution{
public:
        vector<int> twoSum(vector<int>& nums,int target)
        {
            vector<int> result;
            unordered_map<int,int> uMap;
            int res=0;
            for(int i=0;i<nums.size();i++)
            {
                res=target-nums[i];
                unordered_map<int,int>::iterator it=uMap.find(res);
                if(it!=uMap.end())
                {
                    result.push_back(it->second);
                    result.push_back(i);
                    return result;
                }
                uMap[nums[i]]=i;
            }
        }
};

leetcode题解 1.TwoSum的更多相关文章

  1. [LeetCode 题解]: Two Sum

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given an a ...

  2. leetcode题解(持续更新)

    leetcode题解 1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...

  3. LeetCode题解——Two Sum

    题目地址:https://oj.leetcode.com/problems/two-sum/ Two Sum Given an array of integers, find two numbers ...

  4. [LeetCode]题解(python):001-Two-Sum

    题目来源: https://leetcode.com/problems/two-sum/ 题意分析: 这道题目是输入一个数组和target,要在一个数组中找到两个数字,其和为target,从小到大输出 ...

  5. 【LeetCode题解】二叉树的遍历

    我准备开始一个新系列[LeetCode题解],用来记录刷LeetCode题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有 ...

  6. leetcode题解-122买卖股票的最佳时期

    题目 leetcode题解-122.买卖股票的最佳时机:https://www.yanbinghu.com/2019/03/14/30893.html 题目详情 给定一个数组,它的第 i 个元素是一支 ...

  7. 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)

    目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...

  8. 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)

    目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...

  9. 【LeetCode题解】232_用栈实现队列(Implement-Queue-using-Stacks)

    目录 描述 解法一:在一个栈中维持所有元素的出队顺序 思路 入队(push) 出队(pop) 查看队首(peek) 是否为空(empty) Java 实现 Python 实现 解法二:一个栈入,一个栈 ...

随机推荐

  1. 在vue项目中 如何定义全局变量 全局函数

    如题,在项目中,经常有些函数和变量是需要复用,比如说网站服务器地址,从后台拿到的:用户的登录token,用户的地址信息等,这时候就需要设置一波全局变量和全局函数 定义全局变量 原理: 设置一个专用的的 ...

  2. iptables 最终 第四章

    转发 ,NAT 功能 Chain FORWARD 开启网卡转发功能: /proc/sys/net/ipv4/ip_forward #使用sysctl 开启内核转发功能 sysctl - 核心转发: / ...

  3. Docker Kubernetes Service 网络服务代理模式详解

    Docker Kubernetes  Service 网络服务代理模式详解 Service service是实现kubernetes网络通信的一个服务 主要功能:负载均衡.网络规则分布到具体pod 注 ...

  4. 剑指offer(38)二叉树的深度

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 题目分析 树的深度=左子树的深度和右子树深度中最大者+1 代码 fu ...

  5. Shell脚本中的分号使用

    在Linux中,语句中的分号一般用作代码块标识 1.单行语句一般要用到分号来区分代码块,例如: if [ "$PS1" ]; then echo test is ok; fi te ...

  6. windows10下安装Redis

    已有64位的Redis-x64-3.2.100.msi,点击以安装

  7. 扩展的GM命令

    命令 说明 例子 .rl all 重载核心所有自定义数据表   .rl item 重载item_template   .backup a 备份Auth数据库   .backup c 备份Charact ...

  8. 51Nod - 1384 正常解法

    这个是正常解法 #include<stdio.h> #include<string.h> #include<math.h> #include<time.h&g ...

  9. Vnpy二次开发应用所需图标

    在针对Vnpy二次开发时,很多窗口中需要使用到“小图标” 给大家分享一个UI的专业图标网,上面资源齐全. https://www.iconfont.cn/collections?personal=1

  10. vnpy官网说明文档网址

    接触VNPY一年多,一直对作者设计原理和思想有所困惑.发一篇vnpy官网的说明文档,便于以后理解项目代码. http://www.vnpy.org/archives.html