题目:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 0 到 n-1。
注意事项
     你可以假设只有一组答案。
样例

给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1].

1.暴力搜索,复杂度为O(n2)

class Solution {
public:
/*
* @param numbers: An array of Integer
* @param target: target = numbers[index1] + numbers[index2]
* @return: [index1 + 1, index2 + 1] (index1 < index2)
*/vector<int> twoSum(vector<int> &numbers, int target)
{        // write your code here       vector<int> idx(2);//申请一个大小为2的容器存放下标      for(int i=0; i<numbers.size(); i++)    {           for(int j=numbers.size()-1; j>=0; j--)         {               if(numbers[i]+numbers[j]==target && i!=j)            {            idx[1] = i;                 idx[0] = j;             }           }                  }if(idx[0]>idx[1])//交换两数       {           idx[0] = idx[0]^idx[1]^idx[0];//方法错误,输出的都是0           idx[1] = idx[0]^idx[1]^idx[1];}return idx;}
};

注意:上述交换两数的方法输出的都是0

2、哈希表,复杂度为O(n)

原理:基本原理:创建一个hashmap,先把所有的值存在hashmap中,其中关键字key是元素的值,value为对应元素的下标。待查找的关键字为target - nums[i],遍历数组直到找到则返回其在数组中的下标。时间复杂度为O(n)。

class Solution {
public:/** @param numbers : An array of Integer* @param target : target = numbers[index1] + numbers[index2]* @return : [index1+1, index2+1] (index1 < index2)*/vector<int> twoSum(vector<int> &nums, int target) {// write your code hereint size = nums.size();int i = 0;vector<int> result;//这里不能定义长度为2,否则会输出四个数if(size < 2) //判断是否为空{return result;}map<int, int> hashMap;//创建一个map,key是元素的值,value是元素原来的下标for(i=0; i<size; i++) {hashMap.insert(pair<int, int>(nums[i], i));//把所有的元素值和下标插入到map}for(i=0; i<size; i++) {int temp = target - nums[i];if (hashMap.count(temp)!=0 && hashMap[temp]!=i) //hashMap.count(temp)是temp在表中出现的次数{result.push_back(i);result.push_back(hashMap[temp]);break;//只要找到就跳出循环}}if(result[0] > result[1]) //调整大小顺序{int temp = result[0];result[0] = result[1];result[1] = temp;}return result;}
};

参考:1.https://www.cnblogs.com/libaoquan/p/6808064.html

2.http://blog.csdn.net/kkdd2013/article/details/51953035

Lintcode--2(56)--两数之和相关推荐

  1. 领扣LintCode算法问题答案:56. 两数之和

    56. 两数之和 描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 ...

  2. LeetCode/LintCode 题解丨一周爆刷双指针: 两数之和

    描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. ...

  3. 【算法】哈希表 ( 两数之和 )

    算法 系列博客 [算法]刷题范围建议 和 代码规范 [算法]复杂度理论 ( 时间复杂度 ) [字符串]最长回文子串 ( 蛮力算法 ) [字符串]最长回文子串 ( 中心线枚举算法 ) [字符串]最长回文 ...

  4. 两数之和、三数之和、四数之和、K数之和

    两数之和.三数之和.四数之和和K数之和是最近听室友提起的几道有意思的基础题,可以说是把双指针运用的淋漓尽致.(K数之和其实是一个动态规划的题,此处因为满足*数之和的的结构,放在一起对比提一下). 1. ...

  5. 【计算两数之和】不使用加减乘除

    计算两数之和不论在计算机中还是生活中,都不算难(即使某些数据过大).但是如何能更高效的计算时一个难题,或者说在计算机内部是如何解析两个数之间的加法的,这就成了一个可以探讨的问题. 当然我们很了解十进制 ...

  6. 【每日一算法】两数之和 IV - 输入 BST

    微信改版,加星标不迷路! 每日一算法-两数之和IV-输入BST 作者:阿广 阅读目录 1 题目 2 解析 1 题目 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目 ...

  7. java 1099_【LeetCode(Java) - 1099】小于 K 的两数之和

    [LeetCode(Java) - 1099]小于 K 的两数之和 [LeetCode(Java) - 1099]小于 K 的两数之和 文章目录 1.题目描述 2.解题思路 3.解题代码 1.题目描述 ...

  8. Leetcode刷题第1题:两数之和(基于Java语言)

    ** Leetcode刷题第1题:两数之和(基于Java语言) ** 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标 ...

  9. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

最新文章

  1. 查找数组键名是否存在
  2. CS48 D BIT
  3. 两个串口通信助手之间通信_串口通信原理
  4. xcode 重新来过openssl项目历程
  5. Ubuntu13.04配置优化(二)转贴
  6. 漫画:什么是B+树?
  7. Jmeter使用教程(图文并茂)|实战干货
  8. 网线制作和交换机工作原理
  9. java习题5参考练习及答案_JAVA练习题(第5章).ppt
  10. UnityMMO资源整合服务器部署
  11. [c/c++]trivial/POD类型和standard layout
  12. 古镇、温泉、阳澄湖品蟹二日游--这个周末,终于放松了一下。
  13. 北京交通大学c语言作业,北京交通大学c语言综合程序设计(黄宇班).doc
  14. python调用woff_GitHub - zergtant/python-maoyan-spider: woff-xml解码 “猫眼网反爬虫机制” 的爬虫。...
  15. MySQL百万级压测数据表
  16. 深度学习网络中backbone是什么意思
  17. [嘿就这么样吧 谁看谁的脸色]井冈春天牌演.活力果子
  18. 用php实现日历输出,php 实现日历
  19. 历史上最牛的演讲—甲骨文总裁拉里埃里森在耶鲁大学的演讲
  20. 后浪程序猿 996 摸鱼求生指南

热门文章

  1. pythonqt4上位机开发_「新阁教育」自由口通信上位机实战案例
  2. Ubuntu系统中利用Sublime分别运行Python与Python3
  3. 怎么样解决小交换机引起的路由环路故障?
  4. 【渝粤教育】国家开放大学2018年春季 3780-21T燃气设备操作与维护 参考试题
  5. 【渝粤题库】陕西师范大学200041 文学概论 作业
  6. mysql主从延时这么长_MySQL主从延迟问题解决
  7. 一文读懂:常见低通、高通、带通三种滤波器的工作原理
  8. 怎么在自己的网站上显示其它网站_自己做网站要怎么选域名?
  9. 【2021.02.09更新】数字信号处理公式推导
  10. 数据结构单链表SingleLinkedList,Java实现单链表增删改查