[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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!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学习