从一个取值范围为1~N的不重复数列中找出所有满足两数和为N+1的数对

来源:互联网 发布:js往json中添加元素 编辑:程序博客网 时间:2024/06/06 05:00

转载:http://blog.csdn.net/wcyoot/article/details/6436304


从一个取值范围为1~N的不重复数列中找出所有满足两数和为N+1的数对


题目:一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。复杂度最好是O(n),如果是O(n2)则不得分。

 


算法:建立一个map<数列元素值, 对应索引>. 对每个元素i,如果N+1-i不在map中,插入i,否则输出(i, map[i]).复杂度O(n).

 

#include <map>// ar为不重复的数列,输出ar中所有两数和为N的数对void PrintPairs(const std::vector<int>& ar, int N){std::map<int, int> nodemap; // <数值,位置>for(size_t i = 0; i < ar.size(); ++i){std::map<int, int>::const_iterator iter = nodemap.find(N - ar[i]);if(iter == nodemap.end())nodemap[ar[i]] = i;else{printf("找到数对(%d, %d)/n", ar[iter->second], ar[i]);}}}

0 0
原创粉丝点击