虽然题目简单,但我这好不容易优化到前2%,感觉也值得分享给大家(方法比较偷机)

题目:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

我的解答:

 class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res();
int endPos = nums.size();
//vector内存是连续的 这里直接取地址
//这样后面访问时不需要调用vecotr的成员函数
//因为不清楚编译器优化级别
int *numArr = &nums[]; if (endPos < )
{
//数组长度比较小时使用原始的双循环法更快点
for (int i = ; i < endPos; ++i)
{
//遍历数组,找出每个元素与target之差做为寻找目标
int nNeed = target - numArr[i];
for (int j = i + ; j < endPos; ++j)
{
//在后面找,看有没有与目标相同的数字
if (numArr[j] == nNeed)
{
//如果有直接返回
res[] = i;
res[] = j;
return res;
}
}
}
} //数组比较大时使用一次遍历哈希查找的方法比较快
map<int, int> mpNums;
pair<map<int, int>::iterator, bool> pairRet;
//int numCurr; //遍历数组
for (int i = ; i < endPos; ++i)
{
//把当前数值当key,当前位置当value插入map
//numCurr = numArr[i]; //实验发现这里使用numCurr取值代替numArr[i]反而慢了
//看来读取消耗远低于写
pairRet = mpNums.insert(make_pair(numArr[i], i)); //如果插入成功(大部分情况下是插入成功的)
if (pairRet.second)
{
//查看map里面是否有目前值-当前元素值的数据存在
//如果有就说明找到目标
int numNeed = target - numArr[i];
map<int, int>::iterator it = mpNums.find(numNeed);
if (it != mpNums.end() && it->second != i)
{
//题目要求不能重复使用自己,所以需要限制it->second != i
res[] = it->second;
res[] = i;
return res;
}
}
else
{
//如果插入失败说明
//已经在map存在相同数值,则看它们加起来是否等于target
if ((numArr[i] << ) == target) //2 * numArr[i]
{
res[] = pairRet.first->second;
res[] = i;
return res;
}
}
} res.clear();
return res;
} };
执行结果:

通过
显示详情
执行用时 :8 ms, 在所有 cpp 提交中击败了98.11%的用户
内存消耗 :10.1 MB, 在所有 cpp 提交中击败了37.46%的用户

leetcode第一题两数之和击败了 98.11% 的用户的答案(C++)的更多相关文章

  1. LeetCode 第一题 两数之和

    题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  2. leetcode刷题--两数之和(简单)

    一.序言 第一次刷leetcode的题,之前从来没有刷题然后去面试的概念,直到临近秋招,或许是秋招结束的时候才有这个意识,原来面试是需要刷题的,面试问的问题都是千篇一律的,只要刷够了题就差不多了,当然 ...

  3. leetCode刷题 | 两数之和

    两数之和: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...

  4. 【leetcode 简单】第一题 两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

  5. LeetCode刷题:第一题 两数之和

    从今天开始刷LeetCode 第一题:两数之和 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种 ...

  6. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  7. 每日一道 LeetCode (1):两数之和

    引言 前段时间看到一篇刷 LeetCode 的文章,感触很深,我本身自己上大学的时候,没怎么研究过算法这一方面,导致自己直到现在算法都不咋地. 一直有心想填补下自己的这个短板,实际上又一直给自己找理由 ...

  8. Leetcode系列之两数之和

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

  9. leetcode每日一题——两数之和

    题目: 两数之和 难度: 简单 描述: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 解法: class Solutio ...

随机推荐

  1. 【论文阅读】TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes

    TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes ECCV2018 北京大学.face++ 思路: ...

  2. 【Luogu P3379】LCA问题的倍增解法

    Luogu P3379 题意:对于两个节点,寻找他们的最近公共祖先. 一个显而易见的解法是对于每一个节点我们都往上遍历一遍,记录下它每一个祖先,然后再从另一个节点出发,一步一步往上走,找到以前记录过第 ...

  3. PL真有意思(七):数据抽象和面向对象

    前言 在之前的名字.作用域那篇提到模块类型,它使程序员可以从一个给定抽象出发,通过实例化产生多个实例:再后面是类,它使程序员可以定义一族相关的抽象. 在这一篇里,我们会来看一下面向对象程序设计及其三个 ...

  4. PHP+Redis实现延迟任务,实现自动取消与完成订单

    简单定时任务解决方案:使用redis的keyspace notifications(键失效后通知事件) : (A)业务场景: 1.当一个业务触发以后需要启动一个定时任务,在指定时间内再去执行一个任务( ...

  5. Web渗透测试流程

    什么是渗透测试? 渗透测试 (penetration test)并没有一个标准的定义,国外一些安全组织达成共识的通用说法是:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法 ...

  6. 机器学习回顾篇(11):支持向量机(SVM)

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  7. jsp 实现查询功能

    要求: 实现查询功能 1.数据库代码 create database mvce; use mvce; create table test2( id int not null identity, tna ...

  8. 在Linux下生成crypt加密密码

    [摘要]当我们用红帽Kickstart脚本或useradd或其他方式写东西的时候,经常会需要用到crypt命令加密生成的密码格式.那么,有没有其他方式可以生成这种格式的密码?事实上,方法有很多 1.我 ...

  9. “Unknown class XXViewController in Interface Builder file.”问题处理

    在静态库中写了一个XXViewController类,然后在主工程的xib中,将xib的类指定为XXViewController,程序运行时,报了如下错误: “Unknown class XXView ...

  10. 移动前端不得不了解的HTML5 head 头标签 —— Meta 标签

    Meta 标签 meta标签是HTML中head头部的一个辅助性标签,它位于HTML文档头部的 <head> 和 <title> 标记之间,它提供用户不可见的信息.虽然这部分信 ...