给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
我的思路:利用双重循环,判断两数之和是否为t,相同就新建一个数组,分别将两个数的下标放进数组并返回。注意:这里不能使用排序,因为排序后,数字的位置就会改变,本题需要的返回的是下标。
思路:使用循环将数组放进map中,数组的值作为key,下标作为value。遍历数组的元素,每一次计算target与元素的差,然后在map中寻找是否存在改差,存在则新建一个数组,将该元素的下标以及map的value放进数组中并返回。注意:target可能在存在半数(target/2的值),所以不仅要判断时候找到,而且要判断两个下标是否相同,相同则不对,进入下一轮遍历。要先判断是否找到,再判断下标是否相同,否则如果没有找到就会返回end()【NULL】,对null操作都会报错。
map小结:https://blog.csdn.net/shuzfan/article/details/53115922
定义:map<int,int>名称;
获取值:map<int,int> a; a->first (取key值) a->second (取value值)
寻找map中是否存在某个值:a.find(值); 返回一个迭代器(相当于该类型的指针,使用时要先定义指针指向它)例如:map<int,int >::iterator it=a.find(值); it->first......
ps:C++11以上可以对类型名称进行简化,使用auto 可以自动找到其类型,
简化后: auto it=a.find(值);
遍历map的key和value:定义一个迭代器it(相当于指针)先指向map的开始(a.begin()),操作后,it++(将指针后移),知道it=a.end() (指向null结束)。