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. 谷歌浏览器怎样把网页全部内容保存为.mhtml文件?

    Chrome保存.mhtml网页文件的方法: 在 Chrome 地址栏中键入chrome://flags,回车, 在页面搜索栏输入mhtml 把“Save Page as MHTML”项修改为 Ena ...

  2. [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组

    程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...

  3. VS2015 scanf 函数报错 error C4996: 'scanf'

    错误提示:error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. ...

  4. jQuery实现淘宝购物车小组件

    我爱撸码,撸码使我感到快乐! 大家好,我是Counter,本章将实现淘宝购物车小组件, 用原生js可以实现吗,当然可以,可是就是任性一回,就是想用jQuery 来实现下.HTML代码不多才4行,CSS ...

  5. 牛客练习赛43C Tachibana Kanade Loves Review

    题目地址 Link 题解 虚点这种东西还是没有掌握好啊. 考虑建一个虚点,向已经学会的东西连一条边权为0的边,关系正常连边,单独学的从虚点连一条边过去. 然后做一遍最小生成树就得到答案了. 这题略卡常 ...

  6. Linux下调试.Net core(1):lldb的安装

    windows下,我们对于.net程序发生Crash,资源泄露,死锁等问题的分析,有神器windbg,那现在我们的.net core程序运行在linux上时,该怎么进行对对Core Dump文件进行分 ...

  7. MapReduce编程:单词去重

    编程实现单词去重要用到NullWritable类型. NullWritable: NullWritable 是一种特殊的Writable 类型,由于它的序列化是零长度的,所以没有字节被写入流或从流中读 ...

  8. 封装axios在vue-cli项目中便捷使用

    首先创建一个vue-cli搭建起来的vue项目这个不用多说了. 安装axios,使用npm install axios --save命令安装依赖,这时候项目的package.json文件中的" ...

  9. JxBrowser之二:常用函数addLoadListener

    1.常用函数addLoadListener,包含对页面加载状态的多种监控回调. browser.addLoadListener(new LoadAdapter() { @Override public ...

  10. android ------- 开发者的 RxJava 详解

    在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github: https://github.com/ReactiveX/RxJava https://github. ...