【发布时间】:2018-06-05 09:19:32
【问题描述】:
从给定的数组(称为 numbers[])中,我想要另一个数组(results[]),其中包含第一个数组元素之间的所有求和可能性。
例如,如果我有 numbers[] = {1,3,5},results[] 将是 {1,3,5,4,8,6,9,0}。 有 2^n 种可能性。 一个数字是否出现两次并不重要,因为 results[] 将是 set
我是为配对或三胞胎的总和做的,这很容易。但是我不明白当我们将 0、1、2 或 n 个数字相加时它是如何工作的。
这就是我为配对所做的:
std::unordered_set<int> pairPossibilities(std::vector<int> &numbers) {
std::unordered_set<int> results;
for(int i=0;i<numbers.size()-1;i++) {
for(int j=i+1;j<numbers.size();j++) {
results.insert(numbers.at(i)+numbers.at(j));
}
}
return results;
}
另外,假设 numbers[] 已排序,是否有可能在填充时对 results[] 进行排序?
谢谢!
【问题讨论】:
-
探索
std::partial_sum和std::accumulate。