[LettCode-Map和数组-简单] 找到数组中和为目标值的两个数

给定一个整数数组 intArr,  还有一个目标值 targetValue, 需要在这个数组intArr中找出和为目标值targetValue的两个整数,并返回它们的数组下标

example:

intArr = [2,7,11,15], target = 9, 显然两个值是2和7,它们的数组下标为0,1

这里我们用C++来写这个算法,需要用到C++中STL中的map和vector, 所以先要熟悉一下map和vector

先看vector的初始化方法  std::vector<int> vec(5,0)  => 这个意思是说,创建了一个包括5个int元素,每个元素都是0的vector

std::vector<int> vec(8);  => 创建一个包含8个未初始化int元素的vector

std::vector<int> vec = {1,2,3}; => 创建一个包含3个int元素,值分别是1,2,3的vector

 

再来看看map, map内部是用红黑树来实现的,map它有一个count方法,可以用来查找这个map中关键字k出现的次数

eg:  mymap.count(2)  => 查找关键字2在容器map中出现的次数,如果不存在,就返回0

 了解了vector和map,我们来说这道题目的解题思路:

因为题目要求是要找出这2个整数以及它们在数组中的下标,所以我们可以想到这个map中的键和值,一个是整数本身(键),另一个是这个整数在数组中的下标(值)

1. 也就是说,第一我需要一个循环,来把这个整数数组intArr中的整数及对应的下标,一个一个放入到map中来

2. 接下来,我还是循环这个整数数组intArr, 来判断 targetValue - 整数 的值,用map的count方法来判断(targetValue - 整数 )是否包含在这个map的键中 (这也是为什么上面我要把整数本身作为map的键,而把下标作为值), 如果包含,那么这两个数和下标,我们就得到了, 由于要返回的是2个数组下标,所以我们可以用一个整形数组来存放这2个下标,声明一个包含2个元素的vector就可以

综上看起来,好像是需要两个循环,我们用C++来写这publi

复制代码
   vector<int> FindTwoBySum(vector<int>& intArr, int targetValue)
   {
map<int,int> arrMap;
vector<int> result(2,-1); //存放结果的数组vector, 包含2个元素,初始值都为-1

//用整形数组intArr来填充map
for(int i=0; i<intArr.size();i++)
{
arrMap.insert(map<int,int>::value_type(intArr[i],i));
}

for(int j=0; j<intArr.size();j++)
{
//如果targetValue-intArr[j]在map中存在,表明这样的2个元素存在。同时,我们要保证在map中找到的这个元素,不能是元素intArr[j]本身 => 不能是2个intArr[j],自己相加刚好等于targetValue
if(arrMap.count(targetValue-intArr[j])>0 && (arrMap[targetValue-intArr[j]])!=j)
{
result[0] = j;
restult[j] = arrMap[targetValue-intArr[j]];
break;
}
}

return result;



}
复制代码

 

posted on   新西兰程序员  阅读(20)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2022-11-28 C++中的几种构造函数和析构函数
2022-11-28 C++中class中对私有变量的访问
2022-11-28 C++中Function里面的call by value 和 call by reference
2022-11-28 C++中的Pointer member dereference(D-reference) operator
2016-11-28 Web安全之XSS
2016-11-28 Session和Cookie的分析与区别
2016-11-28 Client Dependency学习
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示