Lintcode--2(56)--两数之和

题目:给一个整数数组,找到两个数使得他们的和等于一个给定的数 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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qml如何发布程序_首创PC端小程序直播发布会,360如何与手机厂商一起共振?

文 | Toby Lu全新的线上发布会形式&#xff0c;正在搅动着手机品牌营销江湖。疫情之下&#xff0c;线上发布会的形式成为手机品牌产品亮相的最佳形式&#xff0c;与传统的联合各家媒体做直播不同&#xff0c;聚焦于一个媒体平台&#xff0c;全场景、全链路的营销模式&#xff0…

CUBA Platform 6.3的新增功能

我们很自豪地宣布新版本的CUBA平台和Studio全面上市&#xff01; 也许这是有史以来功能最丰富的平台版本之一–在各个级别都有重要的变化&#xff1a;体系结构&#xff0c;可扩展性&#xff0c;API可用性和性能。 本文介绍了该平台的主要增强功能。 发行说明中提供了完整的更…

Python字符串的编码与解码(encode与decode)

首先要搞清楚&#xff0c;字符串在Python内部的表示是unicode编码&#xff0c;因此&#xff0c;在做编码转换时&#xff0c;通常需要以unicode作为中间编码&#xff0c;即先将其他编码的字符串解码&#xff08;decode&#xff09;成unicode&#xff0c;再从unicode编码&#xf…

Linux复习笔记

常用命令&#xff1a; pwd &#xff1b;cd&#xff1b; ls&#xff1b; cp&#xff1b; mv&#xff1b; rm &#xff1b;cat&#xff1b; stat&#xff1b; 01234567---r---w-rw---xr-x-wxrwx目录&#xff1a; root: 在root下: useradd mjq 创建mjq用户 passwd mjq 创建密…

Lintcode--4(1)--A+B

题目&#xff1a;给出两个整数a和b, 求他们的和, 但不能使用 等数学运算符。 说明&#xff1a; a和b都是 32位 整数么&#xff1f;是的我可以使用位运算符么&#xff1f;当然可以 样例&#xff1a;如果 a1 并且 b2&#xff0c;返回3显然你可以直接 return a b&#xff0c;但…

1w存银行一年多少利息_100万存银行一年利息多少?能赚多少钱?

100万存银行一年利息多少&#xff0c;是否可以辞掉工作什么都不做随着经济水平的提升&#xff0c;大家手上的存款也越来越多了&#xff0c;众所周知&#xff0c;将资金存放在银行是可以赚取利息收益的&#xff0c;那么如果我们有100万的存款资金后&#xff0c;一年可以获得多少…

Notepad++背景颜色设置

经常试用notepad看代码&#xff0c;白色的背景连续看的时间长了眼睛很容变花&#xff0c;所以找了相关的设置选项&#xff0c;分享给大家 具体设置步骤如下&#xff1a; 然后如下设置 这样前景色背景色已经发生改变了哟&#xff0c;下面再修改下选中行的背景色吧&#xff0c;你…

思维水题

题目链接&#xff1a;https://codeforces.com/problemset/problem/1082/A 题目意思&#xff1a; 一本书有1到n页&#xff0c;起始页数是x&#xff0c; 一次翻页只能翻d&#xff08;向前或者向后翻&#xff0c;但是不能翻出去&#xff0c;例如n5,x1 y5,d10 &#xff09; …

常用的位运算

1、按位与 & 0 & 0 0&#xff1b;0 & 1 0&#xff1b;1 & 0 0&#xff1b;1& 1 1 同时为1则结果为1&#xff0c;否则为0&#xff1b; 如3 & 8 3 00000011 5 00000101 结果为 00000001 2、按位或 || 0|00; 0|11; 1|01; 1|11; 两…

atom feed_适用于Atom Feed的Spring MVC

atom feed如何仅使用两个类就将提要&#xff08;Atom&#xff09;添加到Web应用程序&#xff1f; Spring MVC呢&#xff1f; 这是我的假设&#xff1a; 您正在使用Spring框架 您有一些要发布在供稿中的实体&#xff0c;例如“新闻” 您的“新闻”实体具有creationDate&#…

argb可以和rgb同步吗_神光同步酷炫幻彩,安钛克光棱120 RGB风扇套装

目前这个时代&#xff0c;电脑的各种配件来说&#xff0c;走向了万物皆要有光的风格。相信发光耳机&#xff0c;发光键盘&#xff0c;发光鼠标大家也都见过不少。侧透机箱甚至全透机箱搭配各类酷炫光效在电竞游戏领域也变得越来越火。许多小伙伴在组装一款电脑时也会选择发光风…

使用GDB命令行调试器调试C/C++程序

编译自&#xff1a;http://xmodulo.com/gdb-command-line-debugger.html 作者&#xff1a; Adrien Brochard 原创&#xff1a;LCTT https://linux.cn/article-4302-1.html 译者&#xff1a; SPccman 本文地址&#xff1a;https://linux.cn/article-4302-1.html 没有调试器的…

制造业物料清单BOM、智能文档阅读、科学文献影响因子、Celebrated Italian mathematician ZepartzatT Gozinto 与 高津托图...

意大利数学家Z.高津托 意大利伟大数学家Sire Zepartzatt Gozinto的生卒年代是一个谜[1]&#xff0c;但是他发明的 “高筋图” 在 制造资源管理、物料清单&#xff08;BOM&#xff09;管理、智能阅读、科学文献影响因子计算 等方面具有重要应用。 高津托图 下图是一个制造业物料…

Dools的DMN运行时示例

正如去年宣布的那样 &#xff0c;Drools 7.0将在合规性级别3上为DMN模型提供完整的运行时支持。 在撰写本文时&#xff0c;运行时实现功能已经完成 &#xff0c;并且团队现在正在努力进行改进&#xff0c;以进行错误修复和用户友好。 不幸的是&#xff0c;对于7.0版本&#x…

走向开放、拥抱开源 —— 如何为代码选择一个合适的开源协议

目录 一. 前言 二. 开源协议选择 2.1. 何为 LICENCE&#xff1f; 2.2. 快速选择开源协议 三. 主流开源许可协议&#xff08;Open Source License&#xff09; 3.1. 常用开源协议 3.2. MIT 协议 3.3. BSD 协议 3.4. Apache Licence 协议 3.5. LGPL 协议 3.6. GPL 四…

MATLAB提取矩阵中的一部分

MATLAB对矩阵的操作十分灵活&#xff0c;下面对最近遇到的进行总结&#xff1a; 格式A(m,n)&#xff0c;用于提取矩阵A中符合m,n要求的部分 1、提取某个元素&#xff0c;则m,n为数字标量&#xff0c;如A&#xff08;2,3&#xff09;为第二行第三列的元素。 2、提取某行某列 A…

garch模型python步骤_GARCH模型的建模步骤?

泻药&#xff0c;我将建立道琼斯工业平均指数(DJIA)日交易量对数比的ARMA-GARCH模型来演示建模步骤。原文链接&#xff1a;R语言&#xff1a; GARCH模型股票交易量的研究道琼斯股票市场指数​tecdat.cn获取数据load(fileDowEnvironment.RData)日交易量每日交易量内发生的 变化。…

JavaScript里面的居民们1-数据

编码 首先练习数字相关的一些操作&#xff1a; <div><label>Number A:<input id"radio-a" type"radio" name"math-obj" value"a"></label><input id"num-a" type"text"> <label…

GCC + pthread

多线程介绍POSIX 1003.1-2001 定义了多线程编程的标准API。这个API就是广为人知的pthreads。它的目的在于为跨平台编写多线程程序提供便利。本文介绍了Linux 和 WIN32 平台下的多线程程序的编写方法Linux 系统对 pthreads 提供了良好的支持。一般地安装完Linux系统后在/usr/inc…

MATLAB的size、length函数

size&#xff08;&#xff09;&#xff1a;获取矩阵的行数和列数 &#xff08;1&#xff09;ssize(A), 返回一个行向量&#xff0c;该行向量的第一个元素是矩阵的行数&#xff0c;第二个元素是矩阵的列数。 &#xff08;2&#xff09;[r,c]size(A), 当有两个输出参数…