假设我有以下地图:
map<long,int>var;
它包含以下值:
var.insert( pair<long, int>(1, 1));
var.insert( pair<long, int>(3, 1));
var.insert( pair<long, int>(5, 1));
var.insert( pair<long, int>(7, 1));
var.insert( pair<long, int>(11, 1));
var.insert( pair<long, int>(20, 1));
现在如果我传递目标值= 10而不是我想要从我的地图中打印3,7,如果目标值= 12,那么我想从我的地图中打印5,7。我已经尝试但无法工作 任何人都可以帮助我,我如何从输入映射中选择两个数字,其总和等于目标数字。
- 谢谢。
答案 0 :(得分:0)
查找目标总和项的简单算法:
NSExceptionAllowsInsecureHTTPLoads
迭代所有元素。i
key = target - i->first
和i->first
并返回。key
。如果i
则没有答案。您无法解释如何使用地图的值。看起来您实际上想要使用i == end
代替。
答案 1 :(得分:0)
线性算法:
从两边开始,根据总和,移动正确的迭代器:
std::vector<std::pair<int, int>> find_sums(const std::set<int>&s, int total)
{
if (s.empty()) {
return {};
}
auto b = s.begin();
auto e = s.end();
--e;
std::vector<std::pair<int, int>> res;
do {
auto sum = *b + *e;
if (sum == total) {
res.push_back({*b, *e});
++b;
} else if (sum < total) {
++b;
} else { // sum > total
if (e == s.begin()) {
break;
}
--e;
}
} while (b != e);
return res;
}