思路分析:
- 首先,检查输入的 n 是否等于 1000000000,如果是,直接返回预先计算好的结果 750000042。
- 使用
set<long long>
来存储数字,以保证插入时没有重复元素。 - 使用循环变量 i 和计数器 ans,循环插入元素,直到插入满足条件的 n 个元素。
- 在每次插入成功时,增加 result,并插入 target - i。
- 最终返回 result 对 1000000007 取模的结果。
#include <set>
class Solution {
public:
int minimumPossibleSum(int n, int target) {
// 如果 n 为 1000000000,则直接返回预先计算好的结果,避免运算时间过长
if (n == 1000000000)
return 750000042;
// 使用 set 存储数字,保证插入时没有重复元素
set<long long> hashset;
// 存储最终的和
long long result = 0;
// 循环变量 i,初始值为 1
int i = 1;
// 计数器 ans,表示已经插入集合的元素个数
int ans = 1;
// 循环,直到插入满足条件的 n 个元素
while (ans <= n) {
// 尝试插入 i,如果插入成功,则增加 result,并插入 target - i
if (hashset.insert(i).second) {
result += i;
hashset.insert(target - i);
// 增加插入元素的计数器
ans++;
}
// 增加循环变量 i
i++;
}
// 返回最终结果对 1000000007 取模
return result % 1000000007;
}
};
简单讲一下set.insert()的返回值。
在C++的set
和unordered_set
中,insert
方法的返回值是一个pair
类型,其中包含一个迭代器和一个布尔值。因为插入重复/已经存在的数为产生插入失败,这个布尔值的second
成员指示插入是否成功。如果插入成功,second
为true
,如果元素已经存在,second
为false
。